1

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

"C:\Documents and Settings\"

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

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

如果存在,则删除该目录中的所有 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%
4

2 回答 2

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%"
于 2013-02-22T17:05:06.350 回答
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
于 2013-02-22T17:28:57.520 回答