Copiar una lista de archivos a otra

Copiar una lista de archivos a otra

Tengo una lista de archivos extraídos de una tabla en una base de datos SQL. El archivo puede ser un archivo de texto delimitado o una hoja de cálculo de Excel, lo que funcione mejor.

El archivo se ve así

sourcePath1\fileName1, destPath1\fileName1
sourcePath2\fileName2, destPath2\fileName2
sourcePath3\fileName3, destPath3\fileName3

etc.

Una columna contiene la ruta original y el nombre de archivo de los archivos, la segunda columna contiene la ruta deseada y el nombre de archivo de los archivos. Esto se obtuvo usando una función REPLACE() estándar en la declaración SELECT original.

Ahora tengo las listas que realmente necesito para copiar el archivo de origen al destino.

¿Esto se puede lograr mediante la línea de comandos (por lotes o Powershell?) o mediante secuencias de comandos o una GUI?

Respuesta1

Aquí hay una solución por lotes nativa de Windows para analizar un archivo de texto con valores separados por comas (csv).

@echo off
for /f "tokens=1,2 delims=," %%A in (file.csv) do (
    copy %%A %%B
)

Respuesta2

Según la respuesta de David Ruhmann, lo siguiente funciona. Utiliza xcopyy pasa un mensaje Fal mensaje que pregunta si el archivo es un archivo o una carpeta.

@echo off
for /f "tokens=1,2 delims=," %%A in (book1.csv) do (
    cmd /c echo F | xcopy "%%~A" "%%~B"
)

EDITAR: Se agregó tilde (~) según la sugerencia de @DavidRuhmann.

Respuesta3

Esto es bastante fácil de hacer con un shell Unix. Así es como puedes hacerlo con miCarcasa Hamilton C. (Elversión gratuitahará esto.) Podrías hacer algo muy similar conCygwin bash.

La manera realmente fácil de hacerlo sería transformar la lista usandoseden un script donde cada línea es una cpoperación. Luego simplemente ejecute el script.

sed "s/^^/cp '/;s/, /' '/;s/^$/'/" < list.csv > copyscript.csh
copyscript

Así es como copyscript.cshse vería ese archivo:

Usando sed para convertir una lista CSV en una lista de comandos cp

información relacionada