windows - 如何根据文件大小比较复制文件?

标签 windows batch-file command-line

有子目录SF包含名称相同但文件大小不同 (< 2 MB) 的文件。
我想从 S 复制一个文件至 F ,如果文件来自 S小于 F 中的文件.

FOR /R %%F IN ( >>THE_FILES_IN_S<< ) DO (
    set fileS="S/%%~nF"
    FOR /F "usebackq" %%A IN ('%fileS%') DO set sizeS=%%~zA
    set fileF="F/%%~nF"
    FOR /F "usebackq" %%A IN ('%fileF%') DO set sizeF=%%~zA
    if %sizeS% LSS %sizeF% (copy /V /Y %fileS% %fileF%)
)

上面的代码 不起作用,因为 >>THE_FILES_IN_S<<是伪代码。

什么是正确的表达方式?

是否还有其他错误(正确的形式是什么)?

最佳答案

~2GB 的 32 位有符号整数大小限制不适用
比较用零填充的字符串中的数字使其长度相等时。

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "BaseFolder=C:\Temp"

for %%S in ("%BaseFolder%\S\*") do (
    if exist "%BaseFolder%\F\%%~nxS" (
        for %%F in ("%BaseFolder%\F\%%~nxS"
            ) do Call :Check %%~zS %%~zF || copy /Y "%%S" "%%F" >nul
    )
)
endlocal
Goto :Eof
:Check
Set "S=00000000000000000000%1"
Set "F=00000000000000000000%2"
If %S:~-20% LSS %F:~-20% exit /B 1

上面的批处理通过将大小传递给子例程并比较具有 20 位小数的字符串来避免延迟扩展,结果较少时返回错误级别以在这种失败情况下进行复制。

关于windows - 如何根据文件大小比较复制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50542261/

相关文章:

android - 从 .bat 调用 Gradle 导致批处理执行停止

windows - 如何控制lua输出的行尾 DOS<==>Unix

Windows 上的 Python 3 : extend stdin. readline() 行缓冲区大小

batch-file - 批处理文件编码问题

batch-file - 如何从批处理文件中获取驱动器列表?

linux - 使用“grep”家族的一个。如何获得省略搜索字词的行?

java - 无法在命令行上将 Netbeans 生成的 .java 文件编译为 .class

c++ - 我怎样才能刷新标准输入? (环境 : Mingw compiler, 运行在 xterm 或 Cygwin 的 mintty 中)

windows - 无法以管理员权限运行批处理代码

windows - Windows 批处理文件中的可变行为