这个批处理文件有什么问题?

What is wrong in this batch file?

我正在尝试在批处理文件中编写一个脚本来执行以下操作:

  1. 在 "C:\Project" 中找到名称为 "Mdata" 的所有文件夹。
  2. 删除 "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

您的脚本无法运行的原因是您没有启用延迟扩展,因此 targetdays 将无法用于您的内部 FOR 循环。不过,就目前而言,您不需要为要完成的任务启用此功能。