我在文本文件中有一个文件列表,我想生成一个不存在的文件的报告。我尝试使用以下代码创建批处理文件,但它不适用于任何在其中有空格的文件:
FOR /F %%f IN (filelist.txt) DO (IF EXIST %%f (ECHO %%f exists) ELSE (ECHO %%f doesn't exist >> C:\doesntexist.txt ))
在我的输出文件中,我收到类似" C:\ Documents不存在的错误"显示它没有解析完整的文件名。
我该如何解决这个问题,以便我可以检查所有文件,即使其中包含空格?
答案 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 )
)