这是我运行 test.bat 文件时遇到的错误:
C:\Users>test.bat
C:\Dir1 1\file.csv
The system cannot find the file C:\Dir1.
这是test.bat文件内容:
@Echo off
set "source=C:\Dir1 1\filename.csv"
echo %source%
for /F "Delims=" %%g in (%source%) do (@echo %%g)
如您所见,目录名称中的空格似乎是问题所在。我该如何解决这个问题?
您正确引用了
set
声明:
set "source=C:\Dir1 1\filename.csv"
这将 source 设置为
C:\Dir1 1\filename.csv
,整个赋值周围的双引号确保双引号不会以 source
的值结束,但仍避免包含尾随空格等。如您的 所示echo
声明:
echo %source%
考虑在此处添加引号,以完全清楚地表明此处没有任何问题。
您的问题在于
for
声明:
for /F "Delims=" %%g in (%source%) do (@echo %%g)
这应该是:
for /F "usebackq delims=" %%g in (`type "%source%"`) do (@echo %%g)
或者:
for /F "usebackq delims=" %%g in ("%source%") do (@echo %%g)
第一个有效,因为反引号现在被解释为包含要执行的命令,并且
%source%
的值放在双引号中,以确保正确处理带有空格的值。
第二个有效,因为括号中的值直接用双引号表示
for
这是一个要逐行处理的文件,并且文件名可以包含空格,不会因为引号而出现问题。
所以,更正版本:
@echo off
set "source=C:\Dir1 1\filename.csv"
echo "%source%"
for /F "usebackq delims=" %%g in ("%source%") do (@echo %%g)
有关这些命令的详细信息的重要来源在这里:https://ss64.com/nt/for_cmd.html