【问题标题】:Batch: Compare File Sizes批处理:比较文件大小
【发布时间】:2014-11-04 14:16:21
【问题描述】:

我见过几种比较文件的不同方法,使用 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

【问题讨论】:

    标签: file batch-file compare dos


    【解决方案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]
                )
            )
        )
    )
    

    【讨论】:

    • 非常感谢,我不得不稍微调整一下,因为我希望本地文件具有优先权,而且正如您所建议的,NEQ 更适合我的需求。
    • 由于 cmd 数学的限制,这不适用于大于 2GB 的文件,因此不会为 OP 的 5GB 文件分叉
    • @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 }" &lt;NUL 该命令的退出代码 (!ERRORLEVEL!) 可以在 if 语句中使用。
    • -force 可能不是必需的。我必须添加它来测试我系统上最大的文件 pagefile.sys 和 hiberfill.sys,它们都是隐藏/系统文件。
    • 答案有误。代码检查If file B is bigger than file A 而不是问题If file A is bigger than file B 所要求的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 2017-11-28
    • 2014-08-19
    • 2016-01-18
    • 1970-01-01
    相关资源
    最近更新 更多