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

时间:2015-02-01 13:13:30

标签: batch-file

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

  1. 在“C:\ Project”中找到名为“Mdata”的所有文件夹。
  2. 删除超过30天的“Mdata”中的所有文件夹。
  3. 我的代码是:

    @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”文件夹运行良好的第一项任务。 但删除不起作用。

1 个答案:

答案 0 :(得分:1)

这应该照顾它。 我简化了您的脚本以删除内部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循环。尽管如此,您并不需要为您要完成的任务启用此功能。