我有一个文本文件示例(如下所示),其中包含文件夹中存在的不同文件的名称。
FILENAME1
文件名2
Filename3
.........
现在,我必须使用此文本文件作为输入,将D:\ drive中的文件(文件名取自文本文件)复制到另一个文件夹。我使用的批处理文件如下。
@Echo Off
SetLocal EnableDelayedExpansion
Set n= 0
Set _InTextFile=D:\EXAMPLE.txt
For /F "tokens=*" %%I IN (%_InTextFile%) DO (
Set /a n+=1
Set _var!n!=%%I
set VAR=init
for /f %%a in ('dir /b D:\%%I.asc') do set VAR=exists
if %VAR%==exists
xcopy * D:\New folder
)
Set _
EndLocal
cmd /k
不幸的是,这个Batch脚本没有按预期工作。它不会将特定文件复制到新文件夹位置。此外,它打印为
参数数量无效。
请尝试帮助我确定批处理脚本中的确切问题。如何修改此脚本以便仅将D:\驱动器中的这些特定文件(如示例文本文件中所示)复制到D:\ New文件夹?
提前感谢您的帮助。
答案 0 :(得分:1)
For.exe命令的使用出错。你可以输入For /?在命令行中查看使用它的三种方法。您使用它的方式是获取有关文件的属性而不是文件中的数据。
REM Im trying to get FileSize or some other info about the file itself.
For /F "tokens=*" %%I IN (%_InTextFile%) DO ...
REM Should be this to process the file line by line.
For /F "UseBackQ tokens=*" %%I IN (%_InTextFile%) DO ...
使整个脚本更安全"通过更多Dir.exe命令 明确\具体。将Dir / A-D / B设为甚至不列出文件夹。
如果%VAR%==存在则需要!Var!动态行为。
4 XCopy命令未使用从过程中获得任何好处。它现在写入的方式也很危险,可能会移动你不想移动的文件。
答案 1 :(得分:1)
我可以通过在下面给出的代码中进行修改来解决这个问题。
set destinationfolder=D:\New folder
FOR /F "delims=" %%a IN (E:\EXAMPLE.txt) DO XCOPY /I /S /Y "%%a" "%destinationfolder%\%%~nxa"
这对我很有用。