复制文件列表(txt)

时间:2011-06-06 20:56:27

标签: batch-file scripting-language

我在SO上看到了一些脚本示例,但它们似乎都没有提供如何从.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

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

6 个答案:

答案 0 :(得分:38)

根据名为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%"
)

答案 1 :(得分: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%"
)

答案 2 :(得分:3)

这样做:

@echo 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 "delims=" %%f in (%file_list%) do (
    xcopy "%src_folder%\%%f" "%dst_folder%\"
)

答案 3 :(得分:3)

以下内容将从列表中复制文件并保留目录结构。例如,当您需要压缩在Git / SVN提交范围内已更改的文件时,这非常有用。它还将处理目录/文件名中的空格,并使用相对路径和绝对路径:

(基于此问题:How to expand two local variables inside a for loop in a batch file

@echo off

setlocal enabledelayedexpansion

set "source=input dir"
set "target=output dir"

for /f "tokens=* usebackq" %%A in ("file_list.txt") do (
    set "FILE=%%A"
    set "dest_file_full=%target%\!FILE:%source%=!"
    set "dest_file_filename=%%~nxA"
    call set "dest_file_dir=%%dest_file_full:!dest_file_filename!=%%"
    if not exist "!dest_file_dir!" (
        md "!dest_file_dir!"
    )
    set "source_file_full=%source%\!FILE:%source%=!"
    copy "!source_file_full!" "!dest_file_dir!"
)
pause

请注意,如果您的文件列表具有绝对路径,则必须将source设置为绝对路径。


[¹]如果使用Git,请参阅:Export only modified and added files with folder structure in Git

答案 4 :(得分:0)

这也将保留文件原始文件目录:

@echo off
set src_folder=c:\whatever
set dst_folder=c:\target
set file_list=C:\file_list.txt

for /f "tokens=*" %%i in (%file_list%) DO (
   echo f | xcopy /E /C /R /Y "%src_folder%\%%i" "%dst_folder%\%%i"
)

答案 5 :(得分:0)

也可以使用 robocopy 并且不使用 xcopy 的 for 循环 - 可以解析参数中的文件列表。

robocopy Source_folder Destination_folder [files_to_copy] [options]

用空格分隔符复制字符串的文件。 例如:

robocopy . "d:\my folder" *.txt "my file one.cpp" file2.cpp
robocopy "d:\F 15" "d:\backup\F 15" /E
相关问题