【问题标题】:Batch scripting-cleanup script批处理脚本-清理脚本
【发布时间】:2016-01-28 07:35:33
【问题描述】:

我从事批处理脚本的工作。我需要做这些事情 1.我想在特定目录中找到像“名称”这样的文件夹 前任: c:\测试\名称 c:\测试\b\名称 c:\测试\n\c\名称 2.name文件夹中,需要删除所有子文件夹和文件,所有超过90天的。

我现在改变了我的问题,请给我一个想法......

【问题讨论】:

    标签: windows batch-file


    【解决方案1】:
    @ECHO OFF
    SETLOCAL
    SET "targetdir=U:\destdir"
    ECHO(DEL "%targetdir%\*?*"
    FOR /f "delims=" %%a IN (
      'dir /b /ad "%targetdir%\*" '
      ) DO (
     ECHO(RD /S /Q "%%~a"
    )
    
    GOTO :EOF
    

    您需要更改targetdir 的设置以适应您的情况。如果您愿意,当然可以用文字替换它。

    所需的 RD 命令仅用于测试目的ECHOed。 验证命令正确后,将ECHO(RD 更改为RD 以实际删除目录。

    所需的 DEL 命令仅用于测试目的ECHOed。 验证命令正确后,将ECHO(DEL更改为DEL以实际删除文件。

    如果需要,delfor 命令可以与& 级联。为清楚起见,for 分布在许多行中。

    【讨论】:

      【解决方案2】:

      您缺少星号 *,因此文件夹集扩展到 _delete 文件夹的所有子目录。此外,/D /R 构造似乎没有必要再考虑一下,因为RD /S 确实已经处理了递归删除目录

      FOR /D %%A IN ( folder_you_want_to_clean\* ) DO IF EXIST "%%A" RD /S /Q "%%A" 
      

      但它不会删除folder_you_want_to_clean 文件夹本身中的文件。使用 DEL 命令执行此操作 - /Q 选项会抑制确认提示,就像使用 RD 命令一样:

      DEL /Q folder_you_want_to_clean\*
      

      具体示例:假设您要清理的文件夹是C:\data\oldstuff。然后就做:

      FOR /D %%A IN ( C:\data\oldstuff\* ) DO IF EXIST "%%A" RD /S /Q "%%A" 
      

      C:\data\oldstuff 中包含的所有目录都将消失(当然,这些目录中的所有文件)。但是C:\data\oldstuff 中的任何文件 本身仍然存在!所以要删除它们,请执行以下操作:

      DEL /Q C:\data\oldstuff\*
      

      【讨论】:

      • FOR /R /D "local drive path" %%A IN (_delete* ) DO IF EXIST "%%A" RD "%%A" /S /Q- _delete* 显示不正确的语法..
      • @samun:看起来/R /D 实际上是无效的,需要写成/D /R - 已更正。我对此感到非常惊讶。
      • 我关心的是递归查找根文件夹并删除子目录和文件以及所有...
      • @samun:是的,确实可以,我试过了。我只是在这里手动重写了命令,并在这样做时混淆了/R/D的顺序......
      • @samun:检查文件年龄的要求大大改变了问题。看看FORFILES
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-30
      • 2011-06-15
      • 1970-01-01
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多