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