Copia de una lista (txt) de archivos

He visto algunas de las secuencias de comandos de los ejemplos más ASÍ, pero ninguno de ellos parece proporcionar ejemplos de cómo se leen los nombres de archivo de una .txt lista.

Este ejemplo es buena, así como para copiar todos los archivos de la a a la B carpeta

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

Pero necesito algo como la siguiente, donde puedo llenar en realidad, el origen y el destino de la carpeta:

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

Y en lugar de src_folder = c:\whatever\*.*, los *.* deben ser de la lista de archivos de lectura de un archivo txt.

File-list.txt (ejemplo)

file1.pds
filex.pbd
blah1.xls

Podría alguien me sugieren cómo hacerlo?

  • En bash, este sería un pedazo de la torta. Maldito Windows y su incapacidad para cumplir!
  • Esta es una de las cosas lote de programación fue hecho, por lo que es un pedazo de pastel de aquí, también.
  • ¿cómo puedo agregar una extensión a %%i? en filelist.txt tengo los nombres de los archivos, pero los archivos son .pbd extensión
InformationsquelleAutor BoDiE2003 | 2011-06-06

5 Kommentare

  1. 39

    Dado su lista de nombres de archivo en un archivo llamado File-list.txt, las siguientes líneas deben hacer lo que quieras:

    @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%"
    )
    
    • para hacer frente con espacios en blanco en los nombres de archivo en la lista de archivos utilice la opción "tokens=*" en el FOR comando.
    • Dice que no encuentra los archivos, además, yo no uderstand donde agregar «tokens=*»
    • for /f «tokens=*» %%i in (File-list.txt) ¿xcopy /S/E/U «%src_folder%\%%i» «%dst_folder%»
    • El que estaba el archivo no se encuentra con esta respuesta. Consiguió trabajo con una ligera modificación: for /f "tokens=*" %%i in (File-list.txt) DO xcopy "%src_folder%%%i" "%dst_folder%"
    • Gracias @Anthony he editado la respuesta para solucionar este problema, mediante la eliminación de la barra diagonal de la src_folder (que es equivalente a lo que hizo).
    • Tal vez una buena adición, es cuando se desea copiar no es una lista de archivos, pero una lista de carpetas y su contenido, esto funciona: @echo off set src_folder=d:\source\ set dst_folder=d:\target\ set dir_list=d:\copylist.txt if not exist "%dst_folder%" mkdir "%dst_folder%" for /f "delims=" %%f in (%dir_list%) do ( if not exist "%dst_folder%\%%f\" (mkdir "%dst_folder%\%%f\") xcopy "%src_folder%\%%f\*.*" "%dst_folder%\%%f\" )
    • Quitar el /U ! (Sólo copia los archivos que ya existe en el destino) que significaba /V (Verifica archivos…)
    • Lo que si tengo una lista que contiene la ubicación de los archivos, como «D:\pics\Lam In\IMG_7894.jpg»?

  2. 20

    Sólo traté de usar Frank Bollack y sparrowt la respuesta, pero sin éxito, ya que incluye un modificador /U para xcopy. Es mi entendimiento de que /U significa que los archivos solo se copiarán si ya existe en el destino que no era el caso para mí y no parece ser el caso para el original interrogador. Puede tener haver sido de a /V para comprobar que tendría más sentido.

    Quitar el modificador /U solucionado el problema.

    @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%"
    )
    
    • Me encontré en la misma situación en la que copiar los archivos JPG. Ninguno se copian con el modificador /U, pero sin /U copias de éxito.
  3. 3

    Esto va a hacer es:

    @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%\"
    )
    
    • Algunas advertencias (1)if not exist sólo funciona para los archivos; (2) "usebackq" es inútil en esta sintaxis, prefiero incluir "tokens=*" para hacer frente con espacios en blanco en los nombres de archivo; y (3)el uso de " que rodea los parámetros de XCOPY
  4. 3

    El siguiente será copiar archivos de una lista y conservar la estructura de directorios. Útil cuando se necesita para comprimir los archivos que han sido modificados en un rango de Git/SVN commits1, por ejemplo. Se ocupan también de los espacios en el directorio/nombres de archivo, y funciona tanto con absoluta y relativa caminos:

    (basado en esta pregunta: Cómo ampliar dos variables locales dentro de un bucle for en un archivo de proceso por lotes)

    @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

    Tenga en cuenta que si su archivo de lista de rutas de acceso absolutas, debe establecer source como una ruta de acceso absoluta así.


    [1] si el uso de Git, ver: La exportación sólo se modifica y agrega los archivos con la estructura de carpetas en Git

    • Funcionó mucho mejor que el xcopy solución hicieron por mí como que no crear un montón de carpetas vacías y volcar todo en la carpeta de destino como la parte superior de votación de respuesta sí 😐
  5. 0

    Esto también mantener los archivos originales directorio de archivo:

    @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"
    )
    

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea