批处理文件,用于检查文件列表是否存在。不适用于空间

时间:2015-01-02 23:52:33

标签: windows batch-file cmd batch-processing

我在文本文件中有一个文件列表,我想生成一个不存在的文件的报告。我尝试使用以下代码创建批处理文件,但它不适用于任何在其中有空格的文件:

FOR /F %%f IN (filelist.txt) DO (IF EXIST %%f (ECHO %%f exists) ELSE (ECHO %%f doesn't exist >> C:\doesntexist.txt ))

在我的输出文件中,我收到类似" C:\ Documents不存在的错误"显示它没有解析完整的文件名。

我该如何解决这个问题,以便我可以检查所有文件,即使其中包含空格?

2 个答案:

答案 0 :(得分:6)

如果字符串可能包含像空格一样的分隔符,则需要"enclose that string in quotes"

for /f 标记默认情况下它在分隔符上收到的数据,因此第一个指定的标记被分配给元变量(在您的情况下为%%f),紧邻{ {1}}等等。

您可以使用命令修饰符控制多少令牌和分隔符以及其他解析特征(来自提示,请参阅%%g

在您的情况下,您只需要一个没有分隔符的标记(默认为1个标记,分隔符= 分隔符),所以

for /?

如果FOR /F "delims=" %%f IN (filelist.txt) DO (IF EXIST "%%f" (ECHO %%f exists) ELSE (ECHO %%f doesn't exist >> C:\doesntexist.txt )) 包含空格,则会出现一些额外的复杂情况。在这种情况下,你需要

filelist.txt

出于上文提到的文档FOR /F "usebackqdelims=" %%f IN ("filelist.txt") DO (IF EXIST "%%f" (ECHO %%f exists) ELSE (ECHO %%f doesn't exist >> C:\doesntexist.txt )) 中“解释”的原因。

答案 1 :(得分:0)

您必须使用引号:

FOR /F %%f IN (filelist.txt) DO (
    IF EXIST "%%f" (ECHO "%%f" exists) ELSE (ECHO %%f doesn't exist >> C:\doesntexist.txt )
)