2013-07-24 61 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

相关问题