una txt todos texto subcarpetas pasar obtener nombres los listas listado lista guardar generador crear carpetas carpeta archivos batch-file scripting-language

batch-file - txt - obtener listado de archivos de una carpeta



Copie una lista(txt) de archivos (5)

He visto algunos ejemplos de scripts sobre SO, pero ninguno de ellos proporciona ejemplos de cómo leer nombres de archivos de una lista .txt.

Este ejemplo es bueno, para copiar todos los archivos de la carpeta A a B

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

Pero necesito algo así como el siguiente, donde puedo llenar realmente la carpeta de origen y destino:

@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/*.* , Esos *.* Necesitan ser una lista de archivos leídos desde un archivo txt.

File-list.txt (ejemplo)

file1.pds filex.pbd blah1.xls

¿Podría alguien sugerirme cómo hacerlo?


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

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


Esto lo hará:

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


Esto también mantendrá los archivos del directorio original de archivos:

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


Intenté utilizar la respuesta de Frank Bollack y Sparrowt, pero sin éxito porque incluía un modificador / U para xcopy. Entiendo que / U significa que los archivos solo se copiarán si ya existen en el destino, lo que no fue el caso para mí y no parece ser el caso para el que realizó la pregunta original. Puede haber sido un a / V para verificar, lo que tendría más sentido.

La eliminación del interruptor / U solucionó 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%" )


Lo siguiente copiará los archivos de una lista y conservará la estructura del directorio. Es útil cuando necesita comprimir archivos que se han modificado en un rango de confirmaciones de Git / SVN, por ejemplo. También tratará los espacios en los nombres de directorio / archivo, y trabajará con rutas relativas y absolutas:

@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 lista de archivos tiene rutas absolutas, también debe establecer la source como una ruta absoluta.

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