从文件中读取输入不适用于包含空格的文件名

时间:2013-08-08 17:55:49

标签: batch-file

我有一个案例,我必须移动超过15,000个文件。有许多重复,所以我通过MD5解析它们,现在我在输入文件(files.txt)中有一个文件名列表。 我想从中读取,然后将列出的文件复制到新目录。 我拉了一个旧的批处理,有人写了一个由两部分组成的简单脚本并对其进行了修改。

适用于没有空格的文件。如何才能涵盖所有文件名? 另外,我不能将所有这些都放在一个文件中吗?

Cstart.bat:

for /f %%x in (files.txt) do call copyfiles.bat

copyfiles.bat:

set filename=%1
copy "C:\temp\%filename%" "C:\temp\pruned files\"

2 个答案:

答案 0 :(得分:1)

您当前的代码甚至没有将filename传递给copyfiles.bat,因此它无法使用或不使用空格。 (如果您需要确认,请在echo %1 %filename & pause的{​​{1}}行之前添加copy并运行copyfiles.bat

话虽如此,您可以轻松地在一个文件中完成所有操作:

cstart.bat

要确保它有效,只需将上面一行中的for /f %%x "tokens=1 delims=*" in (files.txt) do copy "C:\Temp\%%x" "C:\Temp\pruned files\%%x" 替换为copy,然后从命令提示符处运行它。

我使用包含以下内容的名为echo的文本文件对此进行了测试:

test.txt

包含名为One.txt Two.txt Three.txt And Four.txt 的批处理文件,其中包含:

testcopy.bat

上述测试显示了这个输出:

@echo off
for /f "tokens=1 delims=*" %%x in (test.txt) do echo "C:\Temp\%%x" "C:\Temp\test this\%%x"

答案 1 :(得分:0)

for /f "usebackqdelims=" %%x in ("my file list.txt") do copy "C:\temp\%%~x" "C:\temp\pruned files"