Copy a list (txt) of files

后端 未结 5 1039
逝去的感伤
逝去的感伤 2020-11-29 22:27

I\'ve seen some scripts examples over SO, but none of them seems to provide examples of how to read filenames from a .txt list.

This example is good, so as to copy a

相关标签:
5条回答
  • 2020-11-29 22:55

    Given your list of file names in a file called File-list.txt, the following lines should do what you want:

    @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%"
    )
    
    0 讨论(0)
  • 2020-11-29 23:06

    The following will copy files from a list and preserve the directory structure. Useful when you need to compress files which have been changed in a range of Git/SVN commits¹, for example. It will also deal with spaces in the directory/file names, and works with both relative and absolute paths:

    (based on this question: 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
    

    Note that if your file list has absolute paths, you must set source as an absolute path as well.


    [¹] if using Git, see: Export only modified and added files with folder structure in Git

    0 讨论(0)
  • 2020-11-29 23:07

    This will do it:

    @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%\"
    )
    
    0 讨论(0)
  • 2020-11-29 23:10

    This will also keep the files original file directory:

    @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"
    )
    
    0 讨论(0)
  • 2020-11-29 23:21

    I just tried to use Frank Bollack and sparrowt's answer, but without success because it included a /U switch for xcopy. It's my understanding that /U means that the files will only be copied if they already exist in the destination which wasn't the case for me and doesn't appear to be the case for the original questioner. It may have meant to have been a /V for verify, which would make more sense.

    Removing the /U switch fixed the problem.

    @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%"
    )
    
    0 讨论(0)
提交回复
热议问题