有子目录S
和 F
包含名称相同但文件大小不同 (< 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/