【问题标题】:Windows Shell Batch Script to copy the last 10 modified files用于复制最后 10 个修改文件的 Windows Shell 批处理脚本
【发布时间】:2014-03-25 17:34:33
【问题描述】:

我正在尝试创建一个脚本来从目录中复制最近修改的 10 个文件。

我正在尝试使用此代码:

for /F %%I IN ('DIR *.* /B /A:-D-H /O:-D') do (
  copy /Y %%I C:\DestinationDir
)

这段代码全部复制了,如何在第 10 次迭代后停止“for”?

=====================

第二次尝试解决这个问题。

我尝试将其拆分为两个脚本,但“exit /b”(或仅“exit”)完成了所有批处理过程:

FirstScript,相同的代码,但在复制最新文件后试图退出:

for /F %%I IN ('DIR *.* /B /A:-D-H /O:-D') do (
  copy /Y %%I C:\DestinationDir
  exit /b
)

SecondScript,循环 10 次调用 FirstScript:

for /l %x in (1, 1, 10) do (
   FirstScript.bat
)

【问题讨论】:

    标签: windows shell batch-file for-loop


    【解决方案1】:

    这是一个没有延迟扩展且不使用 FIND 或 FINDSTR 的变体。当我故意除以零时,我有条件地退出循环。

    set cnt=10
    for /f "eol=: delims=" %%F in ('dir /o-d /a-d-h /b') do (
      copy /y "%%F" c:\destinationDir
      2>nul set /a 1/(cnt-=1) || goto :break
    )
    :break
    

    【讨论】:

      【解决方案2】:
      for /f "tokens=1,* delims=:" %%a in ('dir /o-d /a-d-h /b * ^| findstr /n "^"') do (
          if %%a gtr 10 goto done
          copy /y "%%b" c:\destinationDir
      )
      :done
      

      【讨论】:

        【解决方案3】:

        试试这个:

        @echo off
        setlocal enabledelayedexpansion
        
        set cnt=0
        for /f "tokens=1,2* delims=[]" %%b in (
        'dir /b /a-d-h /o-d^|find /n /v ""') do (
          set /a cnt+=1
          if !cnt! LEQ 10 echo copy /y "%%c" "c:\DestinationDir"
        )
        

        当您看到想要的结果时移除回声。

        【讨论】:

        • 不使用为什么要在每个文件前加上行号?
        • @dbenham - 我只是在做一些测试时把它放在那里,忘了把它拿出来。
        猜你喜欢
        • 1970-01-01
        • 2018-09-02
        • 1970-01-01
        • 1970-01-01
        • 2013-03-01
        • 2019-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多