我需要将文件从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
答案 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