将除最后修改的文件之外的所有文件复制到新目录

时间:2014-04-24 17:32:10

标签: windows batch-file last-modified

我需要将文件从c:\ prueba1移动到c:\ prueba99,但我不知道如何在源目录(c:\ prueba99)中的所有文件之间进行比较,以移动目录中的所有文件目录中最后一个修改过的文件除外。我知道有一个带有InstallDate,LastModified的wmic命令,但我不知道ms-dos语法是为了对变量进行比较并比较它以知道一个文件已经被重新修改了

我找到了一个例子:

for /f "delims=" %%A in ('wmic datafile where "drive = 'c:' and path='\\windows\\'"
   get LastModified^,Name /format:table^|find ":"^|sort /r') do @echo %%A

并尝试修改它而没有结果,因为它似乎只是列出数据文件名而不是文件本身。

这是我的修改版本:

for /f "skip=1 delims=" %%A  in ('wmic datafile where "drive = 'c:' and path='\\prueba1\\'"
    get LastModified^,Name /format:table^|find ":"^| sort/r') do move (%%A) c:\prueba99

3 个答案:

答案 0 :(得分:0)

获取上次修改文件的方法:

@echo off
set $path=c:\prueba99

for /f %%a in ('dir/b/a-d/o-d "%$path%"') do (
set $Last=%%a
goto:next)

:next
echo Last modified : [ %$Last% ]

答案 1 :(得分:0)

for /f "skip=1 delims=" %%a in ('dir /b /tw /o-d /a-d c:\prueba1\*.*'
) do move "c:\prueba1\%%a" "c:\prueba99"

dir命令以降序创建日期顺序获取文件,因此第一个是最新的。 for命令遍历此列表,跳过第一个,将文件移动到目标文件夹。

答案 2 :(得分:0)

这应该适合您,它还允许您丢弃任意数量的最新文件(对于您的情况我已经拍摄1):

@echo off
setlocal

:: change the next two statements to match what you want
set srcdir=C:\prueba1
set tgtdir=C:\prueba99
if not exist %tgtdir%\*.* md %tgtdir%
set ctr=0
for /f "tokens=*" %%a in ('dir "%srcdir%" /o-d /b') do call :maybemove "%%a"
set /a ctr-=3
echo %~n0: %ctr% files were moved from %srcdir% to %tgtdir%
endlocal
goto :eof

::--------------------

:maybemove
:: increment counter and bypass the ONE newest file
set /a ctr+=1
if %ctr% leq 1 goto :eof
:: remove the double-quotes from the front and back of the filename
set fn=%~1
:: perform the move
move /y "%srcdir%\%fn%" "%tgtdir%"
goto :eof