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

时间:2018-08-30 12:47:44

标签: 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

以上代码将所有这三个文件复制到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

上面的代码不再起作用... 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您忘记选择要分割的delims

FOR /F "delims=" %%a in (find_file_list.txt) DO COPY "%%a" "C:\test\%%~nxa"

默认分隔符为空格,如果文件包含空格,它将在空格处拆分。 只需添加"delims="即可将其更改为完整的字符串。

答案 1 :(得分:0)

要输出文件中的每个非空行,应确保规定all tokensno delimiters(根据您的任务,您可能还需要防止排除以特定字符开头的行,默认的For行为是忽略所有以分号( ; 开头的行。
< em>在这种情况下,我倾向于规定all tokens;与规定no分隔符不同,这将删除每一行中的所有前导空白(这将防止拾取带有意外前导空格的文件)。

您不能copy一个不存在的文件,可以尝试使用2>Nul来抑制任何错误,但是我认为最好先查看该文件是否存在。

copy文件时,您只需要提供目的地,(如果您要更改文件名,则只需提供文件名)

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

因此,这里是一个批处理文件示例:

@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 @If Exist "%A" XCopy "%A" "C:\test\">Nul