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 )