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

时间:2017-12-19 11:23:21

标签: windows for-loop cmd path filesize

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

setTimeout(function(){
     printPage.print();
     printPage.close();
}, 2000);

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

你有想法获得第一个文件的大小吗?

1 个答案:

答案 0 :(得分:1)

不要使用选项/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="不存在,这意味着环境变量{{ 1}}未在 FOR 命令行后分别删除。

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

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

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

  • file2Size
  • for /?
  • goto /?
  • if /?
  • rem /?