2013-07-24 140 views
0

如果文件大小不再變化(完全處理),我想將文件從dir1移動到dir2。一個可能的參加者將問大小0(在0s)和大小10(在10s),並且如果size0 = size10,則將文件從dir1移動到dir2。使用批處理文件複製文件的Windows中的智能文件夾

如何在Windows XP的命令行中執行此操作?

+0

你可以有一個腳本,而不是CLI命令。 – Endoro

回答

0

像這樣的東西可能會奏效:

@echo off 

setlocal 

set "file=C:\path\to\your.file" 
set "destination=D:\some\folder" 

:loop 
call :GetSize "%file%" s1 
call :Sleep 10 
call :GetSize "%file%" s2 
if %s1% neq %s2% goto loop 

call :MoveUnlessExists "%file%" 

goto :eof 

:GetSize 
set "%~2=%~z1" 
goto :eof 

:Sleep 
set /a "n=%1+1" 
ping -n %n% 127.0.0.1 >nul 
goto :eof 

:MoveUnlessExists 
if not exist "%destination%\%~nx1" move "%~f1" "%destination%\" 
goto :eof 
+0

謝謝!這很好。 ping步驟僅用於掛起,所以我還可以使用其他的東西來暫停? –

+0

@Denis是的。如果你有一個實際的'sleep'命令,你可以刪除整個':Sleep''子例程「。 –

+0

太好了,謝謝。還有一個問題:如果我只想將dir1中的文件複製到dir2中尚未包含在dir2中的文件,應該添加什麼?有沒有一個微不足道的方法來做到這一點? –

2

試試這個:

@ECHO OFF &SETLOCAL 
CD /d dir1 
:loop 
FOR %%a IN (file) DO SET "size=%%~za" 
PING -n 10 localhost >NUL 
FOR %%a IN (file) DO IF %%~za equ %size% (move "%%~a" dir2) ELSE GOTO :loop 
+0

這也適用。它似乎更優雅,但也更難理解:)我對不接受您的答案表示歉意,但是非常感謝您的幫助。 –

+1

+1雖然%size%永遠不會被更新,所以文件將永遠不會被複制 - 或者我誤解了?它應該監視不斷變化的大小並在靜止時進行復制。 – foxidrive

+0

@foxidrive是的,你是對的,沒有更新 - 沒有結束。謝謝! – Endoro

相關問題