【问题标题】:Batch to delete all files in a folder with a wildcard in the path批量删除路径中带有通配符的文件夹中的所有文件
【发布时间】:2023-04-06 05:27:01
【问题描述】:

所以我要做的是进入以下目录中的每个文件夹

"C:\Documents and Settings\"

对于其中的每个文件夹,无论名称如何,检查该路径是否存在

"C:\Documents and Settings\*\Local Settings\Application Data\CSMRpt\"

如果存在则删除该director中的所有txt文件,如果路径不存在则什么也不做,继续“C:\Documents and Settings\”中的下一个文件夹

这是我目前想出的:

set PATH = "\Local Settings\Application Data\CSMRpt\"
set FILETYPE = "*.txt"
for /d %%g in ("C:\Documents and Settings\*") do if exist %%g%PATH% goto pathexists
:pathexists
del %%g%PATH%%FILETYPE%

【问题讨论】:

    标签: batch-file wildcard delete-file


    【解决方案1】:

    试试这个。

    @echo off
    setlocal
    set cwd=%CD%
    set p=Local Settings\Application Data\CSMRpt
    cd /d "c:\Documents and Settings\"
    for /d %%I in (*) do (
        if exist "%%I\%p%\" (
            pushd "%%I\%p%\"
            del /q *.txt
            popd
        )
    )
    :: (change back to original directory)
    cd /d "%cwd%"
    

    【讨论】:

    • 您可以使用cd 更改驱动器以及cd /D fullpath
    • 次要注意:我倾向于使用if exist "%%d\.",带有尾部斜线点,以检查目录名称。
    【解决方案2】:

    这里有一些问题,您不能在 set 命令中的 = 周围有空格,使用 goto 不会传递变量(但是您可以改用 call 并将其作为参数传递)你不需要为每个变量加上引号,%PATH% 虽然你可以重置它,但你不应该这样,因为它是一个环境变量。

    更正的代码:

    set THEPATH=\Local Settings\Application Data\CSMRpt\
    set FILETYPE=*.txt
    for /d %%g in ("C:\Documents and Settings\*") do if exist "%%g%THEPATH%." del "%%g%THEPATH%%FILETYPE%"
    

    如果您真的不希望 for 循环成为一行,您也可以这样做

    set THEPATH=\Local Settings\Application Data\CSMRpt\
    set FILETYPE=*.txt
    for /d %%g in ("C:\Documents and Settings\*") do if exist "%%g%THEPATH%." call :deltxtfiles "%%~g"
    
    exit /B
    
    :deltxtfiles
    del "%~1%THEPATH%%FILETYPE%"
    goto:eof
    

    【讨论】:

      最近更新 更多