Batch file 此批处理文件中有什么错误?

Batch file 此批处理文件中有什么错误?,batch-file,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 "use

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

  • 在“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
    

    脚本无法工作的原因是您没有启用延迟扩展,因此
    目标
    天数
    将无法用于内部
    for
    循环。尽管如此,您不需要为您试图完成的任务启用此功能。

    可能重复感谢您的工作,它工作正常。现在,我正在尝试将删除之前所有目录的路径(字符串)发送到Excel文件:如果我在“forfiles”循环中添加:“echo@path>>path_Deleted.xls”是否有效@Jason Faulkner。问题是:它向Excel发送“Mdata”文件夹,而不是删除的文件夹字符串!要查看已删除文件夹的名称,我应该将“echo”%%~a“>>路径_Deleted.xls”放在哪里@Jason Faulkner.@YWATFA-Excel是二进制格式,因此您无法将输出直接发送到XLS格式。