窗口命令 : Loop FOR with file containing space in his path

标签 windows for-loop cmd path filesize

我正在尝试检索两个文件的大小以比较彼此的大小。 问题是,两个文件之一在他的路径中包含一个空格,代码是这样的:

SET pathToFile1="C:\Program Files\file1ToCompare"
SET pathToFile2="C:\Users\file2ToCompare"

FOR /F "usebackq" %%A ('%pathToFile1%') DO SET file1Size=%%~zA
FOR /F "usebackq" %%B ('%pathToFile2%') DO SET file2Size=%%~zB

IF %file1Size% LSS %file2Size% (
    :: do things
)

第二个文件的大小设置正确,但没有检索到第一个文件的大小...我已经搜索了一天的答案,但找不到任何答案(也许我搜索不正确,在这种情况下很抱歉)

你有办法获取第一个文件的大小吗?

最佳答案

不要使用选项 /F,它用于解析从文件读取或直接指定的一个或多个字符串,或者从在后台单独的命令进程中执行的命令的捕获输出中读取。

只使用命令FOR,不带任何选项来处理指定的文件。

SET "pathToFile1=C:\Program Files\file1ToCompare"
SET "pathToFile2=C:\Users\file2ToCompare"

IF NOT EXIST "%pathToFile1%" GOTO :EOF
IF NOT EXIST "%pathToFile2%" GOTO :EOF

FOR %%A IN ("%pathToFile1%") DO SET "file1Size=%%~zA"
FOR %%B IN ("%pathToFile2%") DO SET "file2Size=%%~zB"

IF %file1Size% LSS %file2Size% (
    rem do things
)

阅读关于 How to set environment variables with spaces? 为什么最好使用语法 set "variable=value" 并将整个字符串(包括一个或多个环境变量引用)括在双引号中的答案。

阅读 Where does GOTO :EOF return to? 上的下一个答案 这两个 IF 命令是必需的,因为 SET "file1Size=%%~zA" 导致第一个文件上的 SET "file1Size=" 不存在,这意味着环境变量 file1Size 未定义,分别在 FOR命令行。

如果 file1Sizefile2Size 在到达此命令行时不存在,则比较两个文件大小的 IF 条件将导致退出批处理文件处理,因为语法错误。

请注意,在 IF 条件下,Windows 命令解释器只能处理小于 2 GiB 的文件。

要了解使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。

  • for /?
  • goto /?
  • if /?
  • rem /?
  • set /?

关于窗口命令 : Loop FOR with file containing space in his path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47885908/

相关文章:

windows - 如何在 Windows 命令行中用 fart.exe 替换 csv 中的换行符?

php - 将 PHP 从版本 5.2 升级到 5.3

c++ - 英特尔 GMA 4500HD 和垂直同步

java - 如何确保 Java 跨方法找到变量?

c++ - 为左值和右值实现 C++ range-for 包装器

cmd - SSL 证书添加失败,错误 : 183 Cannot create a file when that file already exists - How to bound certificate to ipport?

cmd - 从 sox 获取 .wav 的平均振幅(仅)

windows - 如何将您的应用程序注册到 Http.sys 中?

java - 是否有 DateFormatProvider 将使用 Windows 本地化信息?

r - 降低绘图循环的速度以查看 R 中的移动(无需单击)