复制文件列表(txt)

BoD*_*003 26 scripting-language batch-file

我在SO上看到了一些脚本示例,但它们似乎都没有提供如何从.txt列表中读取文件名的示例.

这个例子很好,以便将所有文件从A文件复制到B文件夹

xcopy c:\olddir\*.java c:\newdir /D /E /Q /Y
Run Code Online (Sandbox Code Playgroud)

但我需要像下一个,我可以填写实际的源和目标文件夹:

 @echo off
 set src_folder = c:\whatever\*.*
 set dst_folder = c:\foo
 xcopy /S/E/U %src_folder% %dst_folder%
Run Code Online (Sandbox Code Playgroud)

而不是src_folder = c:\whatever\*.*,那些*.*需要是从txt文件读取的文件列表.

File-list.txt(示例)

file1.pds
filex.pbd
blah1.xls
Run Code Online (Sandbox Code Playgroud)

有人可以建议我怎么做吗?

Fra*_*ack 39

给定您调用的文件中的文件名列表File-list.txt,以下行应该执行您想要的操作:

@echo off
set src_folder=c:\whatever
set dst_folder=c:\target
for /f "tokens=*" %%i in (File-list.txt) DO (
    xcopy /S/E "%src_folder%\%%i" "%dst_folder%"
)
Run Code Online (Sandbox Code Playgroud)

  • 要处理文件列表中文件名中的空格,请在`FOR`命令中使用选项`"tokens =*"`. (3认同)
  • 我得到的文件没有找到这个答案.得到它稍作修改:`for/f"tokens =*"%% i in(File-list.txt)DO xcopy"%src_folder %%% i""%dst_folder%"` (2认同)

小智 20

我只是尝试使用Frank Bollack和sparrowt的答案,但没有成功,因为它包含了用于xcopy的/ U开关.我的理解是/ U意味着只有在目的地中已经存在文件时才会复制这些文件,这对我来说并非如此,并且对于原始提问者来说似乎不是这样.它可能意味着是一个用于验证的/ V,这将更有意义.

卸下/ U开关解决了问题.

@echo off
set src_folder=c:\whatever
set dst_folder=c:\target
for /f "tokens=*" %%i in (File-list.txt) DO (
xcopy /S/E "%src_folder%\%%i" "%dst_folder%"
)
Run Code Online (Sandbox Code Playgroud)