复制文件列表(txt)
复制文件列表(txt)
我在Stack Overflow上看到了一些脚本示例,但没有一个提供了如何从.txt列表中读取文件名的示例。
这个示例很好,可以将所有文件从A文件夹复制到B文件夹。
xcopy c:\olddir\*.java c:\newdir /D /E /Q /Y
但是我需要像下面这样的东西,我可以实际填写源文件夹和目标文件夹:
@echo off set src_folder = c:\whatever\*.* set dst_folder = c:\foo xcopy /S/E/U %src_folder% %dst_folder%
并且不是src_folder = c:\whatever\*.*
,那些*.*
需要是从txt文件中读取的文件列表。
File-list.txt(示例)
file1.pds filex.pbd blah1.xls
有人能告诉我如何做吗?
问题的出现原因:
1. 使用了错误的语法:在if not exist命令中只能检查文件是否存在,不能检查文件夹是否存在。
2. 使用了无用的语法:在此语法中,usebackq是无用的,应该使用tokens=*来处理文件名中的空格。
3. 在XCOPY命令的参数周围没有使用引号。
解决方法:
1. 更改if not exist命令的使用方式,使用其他方法检查文件夹是否存在。
2. 替换无用的usebackq语法,使用tokens=*来处理文件名中的空格。
3. 在XCOPY命令的参数周围添加引号。
以下是修正后的代码:
off set src_folder=c:\batch set dst_folder=c:\batch\destination set file_list=c:\batch\file_list.txt if not exist "%dst_folder%" mkdir "%dst_folder%" for /f "usebackq tokens=*" %%f in ("%file_list%") do ( xcopy "%src_folder%\%%f" "%dst_folder%\" )
通过以上修正,可以正确地将file_list.txt中列出的文件从src_folder复制到dst_folder。
问题的出现原因:
问题出现的原因是由于在使用Frank Bollack和sparrowt提供的答案时,包含了xcopy命令的/U开关。根据我的理解,/U意味着只有在目标位置已经存在这些文件的情况下才会进行复制,而对于我和原始提问者来说并非如此。可能原本应该使用的是/V开关用于验证,这样更合理。
问题的解决方法:
解决该问题的方法是移除/U开关。移除后,复制操作成功进行。
以下是解决该问题的代码示例:
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%"
)
我在复制JPG文件时遇到了相同的问题。使用/U开关时没有任何文件被复制,但是在不使用/U开关时复制操作是成功的。