Título: [BATCH] Copiado con confirmacion de correcta escritura Publicado por: ovichan en 24 Octubre 2013, 02:13 am Hola a todos, he creado un bat para copiar una serie de archivos en un disco externo y mi intencion es que me saque en pantalla los archivos que se han copiado y si ha habido fallos o no. El script es el siguiente, sin embargo, no se si realmente cumple el objetivo del script o conceptualmente me he equivocado.
Código
He pensado que si está mal, quizás con %ERRORLEVEL% podría sería mejor pero ya implementarlo a esa linea se me escapa. Gracias. Título: Re: [BATCH] Copiado con confirmacion de correcta escritura Publicado por: Eleкtro en 24 Octubre 2013, 08:50 am Solo tienes una cosa mal, el operador & se va a procesar siempre aunque el copy falle... así que por ende el || nunca se va a procesar.
Código
Citar Código: commandA & commandB Run commandA and then run commandB commandA && commandB Run commandA, if it succeeds then run commandB commandA || commandB Run commandA, if it fails then run commandB Saludos. Título: Re: [BATCH] Copiado con confirmacion de correcta escritura Publicado por: ovichan en 24 Octubre 2013, 09:43 am Gracias, ya imaginaba yo q lo habría hecho mal jeje.
Título: Re: [BATCH] Copiado con confirmacion de correcta escritura Publicado por: ovichan en 28 Octubre 2013, 00:51 am Hola estoy implementando este script,para que una vez que compruebe que el archivo de destino no existe borre el que este en el destino y tenga similar nombre. Me explico, mi intencion por ejemplo es copiar un archivo llamado:
[EvoShare] Dragon Ball Z 001 - Aparece un mini Gokuh! Soy Gohan [DVD+DVD] [DUAL+SUBS] by overdrive [DB80E46B].mkv Y este archivo ira a una carpeta "I:\Dragon Ball GT\". Si alli encuentra un archivo similar en nombre pero con distinto numero de CRC, quiero que elimine el archivo de destino y a continuacion copie el que tengo. Bueno por ahora tengo esto que funciona, pero me quedo en un punto donde no hay retorno ^^: Código
Como se puede ver he comprobado la parte del filename que considero clave, vamos el titulo, ya que anteriormente con el primer If se ha realizado un discriminante, y se sabe que el archivo a copiar es diferente. Sin embargo en el IF del tercer FOR ya no paso, no se como puedo hacer para que borrase el archivo que este en "I:\Dragon Ball GT\[EvoShare] Dragon Ball Z 001 - Aparece un mini Gokuh! Soy Gohan [DVD+DVD] [DUAL+SUBS] by overdrive [0001100].mkv" ¿Alguna sugerencia? Quizas esta un poco lioso pero no sabria como abarcarlo de otra manera. Título: Re: [BATCH] Copiado con confirmacion de correcta escritura Publicado por: Eleкtro en 28 Octubre 2013, 07:34 am ¿Alguna sugerencia? Quizas esta un poco lioso pero no sabria como abarcarlo de otra manera. No es nada práctico hacer estas tareas en Batch, creo que manejas un poco Python, sería todo mucho más sencillo usando expresiones regulares puesto que el CRC es una representación hexadecimal. Si no he entendido mal quieres comprobar si el archivo de origen existe en la carpeta destino pero con otro CRC distinto, pues vamos allá en Batch... Código: @Echo OFF & Setlocal enabledelayedexpansion :: Setear variables Set "DBGT=E:\Dragon Box GT" Set "LIST=%DBGT%\I\lista.txt" Set "FILE_ORIGIN=" Set "NAME_ORIGIN=" Set "CRC_ORIGIN=" Set "FILE_DESTINY=" Set "NAME_DESTINY=" Set "CRC_DESTINY=" :: Hacer lista en la unidad destino REM Borrar la lista ya no es necesario REM If exist "%LIST%" (erase "%LIST%") REM (For %%# in ("%DBGT%\I\*.mkv") DO (Echo %%~n#))>"%LIST%" :: Otra fase For %%# in ("*.mkv") do ( Set "FILE_ORIGIN=%%~f#" Set "NAME_ORIGIN=%%~n#" REM "FILE_ORIGIN=C:\Users\Administrador\Desktop\[EvoShare] Dragon Ball Z 001 - Aparece un mini Gokuh! Soy Gohan [DVD+DVD] [DUAL+SUBS] by overdrive [DB80E46B].mkv" REM "NAME_ORIGIN=[EvoShare] Dragon Ball Z 001 - Aparece un mini Gokuh! Soy Gohan [DVD+DVD] [DUAL+SUBS] by overdrive [DB80E46B]" For /F "tokens=7 delims=[]" %%C in ("%%~n#") DO (Set "CRC_ORIGIN=%%C") REM "CRC_ORIGIN=DB80E46B" Call Set "NAME_ORIGIN=%%NAME_ORIGIN:[!CRC_ORIGIN!]=%%" REM "NAME_ORIGIN=[EvoShare] Dragon Ball Z 001 - Aparece un mini Gokuh! Soy Gohan [DVD+DVD] [DUAL+SUBS] by overdrive " For /F "Delims=" %%# in ('Dir /B /S "%DBGT%\*.mkv" | FIND /I "!NAME_ORIGIN!"') Do ( Set "FILE_DESTINY=%%~f#" Set "NAME_DESTINY=%%~n#" ) REM "FILE_DESTINY=E:\Dragon Box GT\[EvoShare] Dragon Ball Z 001 - Aparece un mini Gokuh! Soy Gohan [DVD+DVD] [DUAL+SUBS] by overdrive [ABCDEF00].mkv" REM "NAME_DESTINY=[EvoShare] Dragon Ball Z 001 - Aparece un mini Gokuh! Soy Gohan [DVD+DVD] [DUAL+SUBS] by overdrive [ABCDEF00]" For /F "tokens=7 delims=[]" %%C in ("!NAME_DESTINY!") DO (Set "CRC_DESTINY=%%C") REM "CRC_DESTINY=ABCDEF00" Echo Origen: Echo File: !FILE_ORIGIN! Echo Name: !NAME_ORIGIN! Echo CRC : !CRC_ORIGIN! Echo+ Echo Destino: Echo File: !FILE_DESTINY! Echo Name: !NAME_DESTINY! Echo CRC : !CRC_DESTINY! Echo+ Echo copiar: Echo Copy "!FILE_ORIGIN!" "%DBGT%\" Pause If NOT "!CRC_ORIGIN!" EQU "!CRC_DESTINY!" ( ERASE "!FILE_DESTINY!" Copy "!FILE_ORIGIN!" "%DBGT%\" 1>nul 2>&1 && ( Echo El archivo: "!FILE_ORIGIN!" fue copiado correctamente. ) || ( Echo Hubo un fallo al copiar el archivo "!FILE_ORIGIN!". ) ) ) Pause&Exit PD: Lo he escrito al vuelo, no he testeado el código, aviso Un saludo! Título: Re: [BATCH] Copiado con confirmacion de correcta escritura Publicado por: ovichan en 28 Octubre 2013, 11:21 am Gracias, voy a testearlo. Quizás es mejor q lo haga en python o vbs, tal y como dices. Ta luego.
|