Copier une liste (txt) de fichiers

j'ai vu quelques exemples de scripts sur SO, mais aucun d'eux ne semble fournir d'exemples de la façon de lire les noms de fichiers à partir d'un .liste txt.

cet exemple est bon, afin de copier tous les fichiers du dossier a au dossier B

xcopy c:olddir*.java c:newdir /D /E /Q /Y

mais j'ai besoin de quelque chose comme le suivant, où je peux remplir réellement le dossier source et destination:

 @echo off
 set src_folder = c:whatever*.*
 set dst_folder = c:foo
 xcopy /S/E/U %src_folder% %dst_folder%

et au lieu de src_folder = c:whatever*.* , ces *.* doivent être la liste des fichiers Lire à partir d'un fichier txt.

File-list.txt (exemple)

file1.pds
filex.pbd
blah1.xls

quelqu'un Pourrait-il me suggérer comment le faire?

25
demandé sur BartoszKP 2011-06-07 00:56:26

5 réponses

étant donné votre liste de noms de fichiers dans un fichier appelé File-list.txt , les lignes suivantes devraient faire ce que vous voulez:

@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%"
)
34
répondu Frank Bollack 2017-05-11 14:06:44

je viens d'essayer D'utiliser la réponse de Frank Bollack et sparrowt, mais sans succès parce qu'il comprenait un commutateur A /U pour la xcopie. C'est ma compréhension que /U signifie que les fichiers seront copiés uniquement si elles existent déjà dans la destination qui n'était pas le cas pour moi et ne semble pas être le cas pour l'origine interlocuteur. Cela aurait pu vouloir dire que c'était A /V pour verify, ce qui aurait eu plus de sens.

L'interrupteur /U a réglé le problème.

@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%"
)
20
répondu Scriptman 2015-06-26 05:34:26

Cela va faire:

@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
répondu indiv 2011-06-07 15:33:20

ce qui suit copie les fichiers d'une liste et préserve la structure du répertoire. Utile lorsque vous avez besoin de compresser des fichiers qui ont été modifiés dans une plage de Git/SVN commits, par exemple. Il traitera également des espaces dans les noms de répertoire / fichiers, et fonctionne avec les chemins relatifs et absolus:

@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

notez que si votre liste de fichiers a des chemins absolus, vous devez définir source comme un chemin absolu.

(basé sur cette question: comment étendre deux variables locales à l'intérieur d'une boucle for Dans un fichier de lot )

3
répondu Marc.2377 2018-07-10 07:50:15

cela permettra également de conserver les fichiers du répertoire original:

@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
répondu Norlig 2016-12-09 11:28:10