2014-11-04 142 views
1

我已經看到了使用COMP,FC和其他一些文件比較文件的幾種不同方式,但是我需要做的是基本文件大小比較,然後執行文件的本地副本如果它更大,則轉到網絡文件。批處理:比較文件大小

這些文件可以是200kb和5GB之間的任何文件。所以我真的只對文件大小感興趣,而不是內容。

我更喜歡基本的DOS腳本來運行一個登錄腳本。

Check local file A 
Check remote file B 
If file A is bigger than file B 
    Copy B to A 

回答

1

for循環擴張z將返回一個文件(例如%~zl)的大小。 延遲變量擴展是此腳本的一項要求。這個特定的腳本只在文件較大時纔會複製,但如果文件大小完全不同,可以通過將GTR更改爲NEQ來輕鬆地將其更改爲複製文件。

@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 

SET REMOTE_DIR=\\SERVER\share\path\to\files 
SET LOCAL_DIR=. 

FOR /F %%f IN (files_to_compare.txt) DO (
    SET "REMOTE_FILE=%REMOTE_DIR%\%%~nxf" 
    SET "LOCAL_FILE=%LOCAL_DIR%\%%~nxf" 
    FOR %%r IN (!REMOTE_FILE!) DO (
     @ECHO [REMOTE] %%~nxr: %%~zr 
     FOR %%l IN (!LOCAL_FILE!) DO (
      @ECHO [LOCAL] %%~nxl: %%~zl 
      IF %%~zr GTR %%~zl (
       @ECHO %%~nxr: Remote file IS larger [%%~zr] ^> [%%~zl] 
       COPY /Y "%%~r" "%%~l" 
      ) ELSE (
       @ECHO %%~nxr: Remote file is not larger [%%~zr] ^<= [%%~zl] 
      ) 
     ) 
    ) 
) 
+0

非常感謝,我只好體健這一點,因爲我想在本地文件有優先權,也如你所說,NEQ我需要更好地工作。 – Marky 2014-11-05 11:40:16

+1

由於cmd數學的限制,這將不會工作大於2GB的文件,因此不會爲OP的5GB文件 – 2018-01-22 12:26:27

+0

@LưuVĩnhPhúc分叉,因爲這是PowerShell。 'powershell -noprofile -command「If((get-item -path!REMOTE_FILE!-force).length -ne(get-item -path!LOCAL_FILE!-force).length){Exit 1} Else {Exit 0}」 該命令的出口代碼(!ERRORLEVEL!)可用於if語句。 – mojo 2018-01-22 12:37:12