Windows CMD:循环FOR,其路径中包含空格的文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows CMD:循环FOR,其路径中包含空格的文件相关的知识,希望对你有一定的参考价值。

我正在尝试检索两个文件的大小来比较每个人的大小。问题是,两个文件中的一个在其路径中包含一个空格,代码是这样的:

SET pathToFile1="C:Program Filesfile1ToCompare"
SET pathToFile2="C:Usersfile2ToCompare"

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 Filesfile1ToCompare"
SET "pathToFile2=C:Usersfile2ToCompare"

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="不存在,这意味着在FOR命令行之后没有分别定义环境变量file1Size

如果在到达此命令行时,如果file1Sizefile2Size不存在,则由于语法错

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

要了解使用的命令及其工作方式,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

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

以上是关于Windows CMD:循环FOR,其路径中包含空格的文件的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Kotlin 数据类可以在 Gson 的不可空字段中包含空值?

错误:psycopg2.IntegrityError:“已修改”列在社交身份验证模块中包含空值?

Angularjs:使用ng-option时如何在选择中包含空选项

在 C# 代码中的 DB 中的 Linq 查询中包含空单元格

cmd for 循环拷贝文件

cmd for 循环拷贝文件