
Ayuda con Bat para copiar y hacer backups de archivos
Publicado por Sergio (2 intervenciones) el 28/04/2017 23:16:28
Hola a todos,
Después de intentarlo tanto y no encontrar el por qué no me funciona este código, decidí consultar porque realmente no sé cuál es el problema o si alguno me pueda hacer una sugerencia.
Estoy intentando realizar una copia y un backup automático de uno o más archivos según un archivo de texto llamado Paso.txt. Me explico:
Un usuario deja en una ruta un archivo llamado Paso.txt con esta estructura:
pagina.txt
Ruta1
Ruta2
La primera línea indica el archivo que se va a copiar (en este caso pagina.txt), en la segunda línea indica la ruta origen donde se encuentra el archivo y en la tercera línea la ruta hacia la cual se debe copiar el archivo y así sucesivamente, es decir puede indicar n rutas y n archivos pero siempre conservando la estructura:
pagina.txt
Ruta1
Ruta2
pagina2.txt
Ruta3
Ruta4
Lo que estoy haciendo es leer el archivo y almaceno cada línea en una variable, (lo estoy mostrando en pantalla y lo veo bien), luego creo en la ruta destino una carpeta llamada Backup, hago un respaldo del archivo que voy a copiar en dicha carpeta y luego copio el archivo del origen al destino. El problema es que cuando se me incrementan las variables que estoy utilizando (a, o y d ) no me realiza la copia en el siguiente ciclo y no sé porque, es decir solo me funciona la primera vez. Alguien me podría indicar que estoy haciendo mal?
Nota: Las variables a, o y d si se están incrementando porque las imprimo en pantalla y crecen pero no me permiten ir avanzando entre líneas como deberían.
Acá les dejo el código:
SET /P RutaG= Ingrese la ruta del archivo de pasos:
setlocal enabledelayedexpansion
SETLOCAL ENABLEEXTENSIONS
set c=0
for /f "tokens=*" %%a in (%RutaG%\Paso.txt) do (
set /a c+=1
call set Var!c!=%%a
)
echo El archivo ha sido leido correctamente
pause
for /l %%n in (1,1,!c!) do (echo !Var%%n!)
pause
set /a ciclo=%c% / 3
set a=1
set o=2
set d=3
setlocal enabledelayedexpansion
for /L %%k in (1,1,%ciclo%) do (
echo %%k,!a!,!o!,!d!
mkdir !Var%d%!\Backup
copy !Var%d%!\!Var%a%! !Var%d%!\Backup
pause
copy !Var%o%!\!Var%a%! !Var%d%!
set /a a+=3
set /a o+=3
set /a d+=3
echo %%k,!a!,!o!,!d!
pause
)
endlocal
pause
exit
Después de intentarlo tanto y no encontrar el por qué no me funciona este código, decidí consultar porque realmente no sé cuál es el problema o si alguno me pueda hacer una sugerencia.
Estoy intentando realizar una copia y un backup automático de uno o más archivos según un archivo de texto llamado Paso.txt. Me explico:
Un usuario deja en una ruta un archivo llamado Paso.txt con esta estructura:
pagina.txt
Ruta1
Ruta2
La primera línea indica el archivo que se va a copiar (en este caso pagina.txt), en la segunda línea indica la ruta origen donde se encuentra el archivo y en la tercera línea la ruta hacia la cual se debe copiar el archivo y así sucesivamente, es decir puede indicar n rutas y n archivos pero siempre conservando la estructura:
pagina.txt
Ruta1
Ruta2
pagina2.txt
Ruta3
Ruta4
Lo que estoy haciendo es leer el archivo y almaceno cada línea en una variable, (lo estoy mostrando en pantalla y lo veo bien), luego creo en la ruta destino una carpeta llamada Backup, hago un respaldo del archivo que voy a copiar en dicha carpeta y luego copio el archivo del origen al destino. El problema es que cuando se me incrementan las variables que estoy utilizando (a, o y d ) no me realiza la copia en el siguiente ciclo y no sé porque, es decir solo me funciona la primera vez. Alguien me podría indicar que estoy haciendo mal?
Nota: Las variables a, o y d si se están incrementando porque las imprimo en pantalla y crecen pero no me permiten ir avanzando entre líneas como deberían.
Acá les dejo el código:
SET /P RutaG= Ingrese la ruta del archivo de pasos:
setlocal enabledelayedexpansion
SETLOCAL ENABLEEXTENSIONS
set c=0
for /f "tokens=*" %%a in (%RutaG%\Paso.txt) do (
set /a c+=1
call set Var!c!=%%a
)
echo El archivo ha sido leido correctamente
pause
for /l %%n in (1,1,!c!) do (echo !Var%%n!)
pause
set /a ciclo=%c% / 3
set a=1
set o=2
set d=3
setlocal enabledelayedexpansion
for /L %%k in (1,1,%ciclo%) do (
echo %%k,!a!,!o!,!d!
mkdir !Var%d%!\Backup
copy !Var%d%!\!Var%a%! !Var%d%!\Backup
pause
copy !Var%o%!\!Var%a%! !Var%d%!
set /a a+=3
set /a o+=3
set /a d+=3
echo %%k,!a!,!o!,!d!
pause
)
endlocal
pause
exit
Valora esta pregunta


0