1

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

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

Cstart.bat:

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

复制文件.bat:

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

2 回答 2

1

您当前的代码甚至没有传递filenameto copyfiles.bat,因此无论有没有空格,它都不起作用。(如果您需要确认,请echo %1 %filename & pause在该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"

上面的测试显示了这个输出:

e:\TempFiles>testcopy
"C:\Temp\One.txt" "C:\Temp\test this\One.txt"
"C:\Temp\Two.txt" "C:\Temp\test this\Two.txt"
"C:\Temp\Three.txt" "C:\Temp\test this\Three.txt"
"C:\Temp\And Four.txt" "C:\Temp\test this\And Four.txt"
于 2013-08-08T18:17:32.113 回答
0
for /f "usebackqdelims=" %%x in ("my file list.txt") do copy "C:\temp\%%~x" "C:\temp\pruned files"
于 2013-08-08T19:03:47.170 回答