批处理:从文件路径中包含空格的文件中读取行

时间:2010-12-08 16:41:12

标签: command-line batch-file

要从文件中读取行,请在批处理文件中执行以下操作:

for /f %%a in (myfile.txt) do (
    :: do stuff...
)

现在假设您的文件位于C:\Program Files\myfolder

for /f %%a in ("C:\Program Files\myfolder\myfile.txt") do (
    echo %%a
)

结果:

C:\Program Files\myfolder\myfile.txt

这似乎将给定路径解释为字符串,因此%%a是您的给定路径。

到目前为止我发现的文档中没有这个。 在我开枪之前,请有人帮助我。

3 个答案:

答案 0 :(得分:6)

键入help for时获得的文档会告诉您如果有空格路径该怎么办。

For file names that contain spaces, you need to quote the filenames with
double quotes.  In order to use double quotes in this manner, you also
need to use the usebackq option, otherwise the double quotes will be
interpreted as defining a literal string to parse.

默认情况下,FOR /F的语法如下。

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

此语法说明了type解决方法的工作原理。因为单引号说执行type命令并循环其输出。添加usebackq选项后,语法将更改为:

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ('string') DO command [command-parameters]
FOR /F ["options"] %variable IN (`command`) DO command [command-parameters]

现在,您可以双引号文件的路径,单引号文字字符串,并在要执行的命令周围添加反引号(严重重音符号)。

所以你想这样做:

for /f "usebackq" %%a in ("C:\Program Files\myfolder\myfile.txt") do (
    echo %%a
)

答案 1 :(得分:1)

找到它。

for /f %%a in ('type "C:\Program Files\myfolder\myfile.txt"') do (
    echo Deleting: %%a
)

甚至不问我为什么这样做。

答案 2 :(得分:0)

只需分享以下代码,希望有人会受益。

以下代码同时包含空格的路径,如果读取的行有空格,则在空格丢失后不会导致任何字符问题;

FOR / f“tokens = * delims =,”%% a in('type“C:\ Progrem File \ My Program”')do( echo %% a )