【问题标题】:Want pause for 5 sec in deleting files from fold [duplicate]想要从折叠中删除文件时暂停 5 秒 [重复]
【发布时间】:2018-06-28 11:23:40
【问题描述】:

我正在运行一个窗口脚本来从包含大约 10k 个文件的文件夹中删除文件。我希望我的脚本命令是:

forfiles /p "path" /s /d -30 /c "cmd /c del @file : date >= 30 days >NUL"

,应该删除10个文件然后等待5秒然后再次开始删除然后再次等待5 secons等等? 我想要这个功能,因为如果一次删除10k个文件,它会妨碍服务器的正常工作

【问题讨论】:

  • 把你的问题写清楚。如果要在批处理中暂停,请使用 timeout /t <secondes>
  • 问题可能是您使用的命令ForFiles。当它运行时,它会为每个匹配的文件打开一个新的cmd.exe 实例。所以你有效地打开cmd.exe,删除一个文件并关闭cmd.exe 10000 次。另外为了您的信息,我建议您使用 @path 而不是 @file 并删除它之后的所有内容,除了结束双引号,因为它无效。
  • 试试这个:timeout /T 5 /nobreak

标签: windows batch-file


【解决方案1】:

实现起来很简单

timeout /T 5

对于较旧的 Windows 操作系统,(Vista 之前的版本),其中 timeout 不可用,您可以简单地使用 ping 进行等待。每个回显请求之间有第二个延迟,因此在 5 秒内我们需要 6 个ping 计数。因此,通过运行以下命令,它将等待 5 秒。

ping 127.0.0.1 -n 6 >nul

为了让您了解如何进行删除,您可以执行以下操作:(我使用的是echo,但您可以循环使用del)。

:start
for /L %%G IN (1,1,10) DO echo "Some command"
timeout /T 5
goto start

【讨论】:

    【解决方案2】:

    您可能可以使用与ForFiles 不同的命令并运行脚本而无需暂停或无需将文件数量拆分为更小的块。

    这使用 RoboCopy 及其 /Move 选项:

    @Echo Off
    
    Set "_source=C:\Users\Sumit-Anand\Folder"
    Set "_daysage=30"
    
    Set "_scratch=%TEMP%\~%random%"
    MD "%_scratch%"
    RoboCopy "%_source%" "%_scratch%" /E /Move /Create /MinAge:%_daysage%
    RD /S/Q "%_scratch%"
    

    您需要更改的只是34 行上变量的值字符串,确保不要删除结束双引号或在新字符串中包含任何双引号.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 2016-02-04
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 2015-12-10
      • 1970-01-01
      相关资源
      最近更新 更多