这个批处理文件有什么问题?
What is wrong in this batch file?
我正在尝试在批处理文件中编写一个脚本来执行以下操作:
- 在 "C:\Project" 中找到名称为 "Mdata" 的所有文件夹。
- 删除 "Mdata" 中超过 30 天的所有文件夹。
我的代码是:
@echo off
for /f "delims=" %%a in ('dir /b /s /a:d "C:\project\" ^|findstr /e /i "\Mdata"') do (
@echo "%%~a"
setlocal
set target=%%a
set days=-30
for /f "usebackq delims=" %%G in (
`forfiles /p "%target%" /c "cmd /c if /i @isdir == true echo @path" /d %days% 2^>nul`
) do rd /s /q "%%~G"
endlocal & exit /b
)
pause
找到所有 "Mdata" 个文件夹的第一个任务运行良好。
但是删除不起作用。
这应该可以解决。
我稍微简化了您的脚本以删除内部 FOR
循环,因为您可以使用 FORFILES
命令执行删除。
@echo off
SETLOCAL
set days=-30
for /f "delims=" %%a in ('dir /b /s /a:d "C:\project\" ^|findstr /e /i "\Mdata"') do (
echo "%%~a"
forfiles /p "%%~a" /d %days% /c "cmd /c if /i @isdir==true echo @path & rd /s /q @path"
)
ENDLOCAL
pause
您的脚本无法运行的原因是您没有启用延迟扩展,因此 target
和 days
将无法用于您的内部 FOR
循环。不过,就目前而言,您不需要为要完成的任务启用此功能。
我正在尝试在批处理文件中编写一个脚本来执行以下操作:
- 在 "C:\Project" 中找到名称为 "Mdata" 的所有文件夹。
- 删除 "Mdata" 中超过 30 天的所有文件夹。
我的代码是:
@echo off
for /f "delims=" %%a in ('dir /b /s /a:d "C:\project\" ^|findstr /e /i "\Mdata"') do (
@echo "%%~a"
setlocal
set target=%%a
set days=-30
for /f "usebackq delims=" %%G in (
`forfiles /p "%target%" /c "cmd /c if /i @isdir == true echo @path" /d %days% 2^>nul`
) do rd /s /q "%%~G"
endlocal & exit /b
)
pause
找到所有 "Mdata" 个文件夹的第一个任务运行良好。 但是删除不起作用。
这应该可以解决。
我稍微简化了您的脚本以删除内部 FOR
循环,因为您可以使用 FORFILES
命令执行删除。
@echo off
SETLOCAL
set days=-30
for /f "delims=" %%a in ('dir /b /s /a:d "C:\project\" ^|findstr /e /i "\Mdata"') do (
echo "%%~a"
forfiles /p "%%~a" /d %days% /c "cmd /c if /i @isdir==true echo @path & rd /s /q @path"
)
ENDLOCAL
pause
您的脚本无法运行的原因是您没有启用延迟扩展,因此 target
和 days
将无法用于您的内部 FOR
循环。不过,就目前而言,您不需要为要完成的任务启用此功能。