批量删除路径中带有通配符的文件夹中的所有文件

时间:2013-02-22 16:08:30

标签: batch-file wildcard delete-file

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

"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%

2 个答案:

答案 0 :(得分:3)

试试这个。

@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%"

答案 1 :(得分: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