Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何在有空间的文件夹中循环文件_Batch File - Fatal编程技术网

Batch file 如何在有空间的文件夹中循环文件

Batch file 如何在有空间的文件夹中循环文件,batch-file,Batch File,我有以下代码从列表中复制文件。当文件夹名中的文件路径没有空格时,它可以正常工作。但是文件夹名称有时可能有空格,如何改进代码以处理带有空格的文件夹名称 FOR /F %%a in (find_file_list.txt) DO COPY "%%a" "C:\test\%%~nxa" 基本上,在这个find_file_list.txt中,列出了所有带有路径的文件 c:\abc\def\12345.txt c:\abc\def\12346.txt c:\abc\def\12347.txt 上面

我有以下代码从列表中复制文件。当文件夹名中的文件路径没有空格时,它可以正常工作。但是文件夹名称有时可能有空格,如何改进代码以处理带有空格的文件夹名称

FOR /F %%a in (find_file_list.txt) DO COPY "%%a" "C:\test\%%~nxa"
基本上,在这个find_file_list.txt中,列出了所有带有路径的文件

c:\abc\def\12345.txt

c:\abc\def\12346.txt

c:\abc\def\12347.txt
上面的代码将所有这三个文件复制到test的文件夹中,工作正常。 现在,当find_file_list.txt更改时,实际上真正的文件夹名中有空格,如

c:\ab c\de f\12345.txt

c:\ab c\de f\12346.txt

c:\ab c\de f\12347.txt
上面的代码不再工作了。。。
有什么想法吗?

您忘记选择要拆分的
delims

FOR /F "delims=" %%a in (find_file_list.txt) DO COPY "%%a" "C:\test\%%~nxa"
默认delimeters是空白,如果文件包含它,它将在空白上拆分。
只需添加
“delims=“
将其更改为获取完整字符串。

要输出文件中的每一个非空行,应确保指定
所有标记或
无分隔符,(根据您的任务,您可能还需要防止排除以特定字符开头的行,
行为的默认
是忽略以分号开头的所有行,
).
在这种情况下,我的首选是规定
所有标记
;这与规定
分隔符不同,将删除每行的所有前导空格(这将防止意外携带前导空格的文件被拾取)

您不能<代码>复制< /代码>一个不存在的文件,当使用<代码> 2 > NUL时,您可以抑制任何错误,但是我认为最好先看看文件是否存在。

当您
复制
一个文件时,您只需要提供目的地(如果要更改文件名,您只需要提供文件名)

您可以使用
XCopy
命令,而不是使用
Copy
命令,这样做的好处是创建目标目录(取决于权限),如果它还不存在的话

因此,下面是一个批处理文件示例:

@For/F UseBackTokens^=*EOL^=%%A In(“find_file_list.txt”)Do@If Exist“%%A”XCopy“%%A”C:\test\”>Nul
…以及要从命令提示符下运行的非常轻微的修改版本:

For/F UseBackTokens^=*EOL^=%A In(“find_file_list.txt”)Do@如果存在“%A”XCopy“%A”C:\test\”>Nul