Windows Shell Batch Script复制最近10个修改过的文件

时间:2014-03-25 17:34:33

标签: windows shell batch-file for-loop

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

我正在尝试使用此代码:

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

此代码复制所有这些代码,如何停止" for"经过第10次迭代?

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

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

我尝试用两个脚本分割它,但是"退出/ b" (或只有"退出")完成所有批处理过程:

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
)

3 个答案:

答案 0 :(得分:2)

这是一个没有延迟扩展且不使用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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

试试这个:

@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"
)

在看到所需结果时删除回声。