elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [BATCH] Copiado con confirmacion de correcta escritura
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [BATCH] Copiado con confirmacion de correcta escritura  (Leído 5,136 veces)
ovichan

Desconectado Desconectado

Mensajes: 81


Ver Perfil
[BATCH] Copiado con confirmacion de correcta escritura
« 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
  1. @echo off
  2. Title Copiar
  3.  
  4. if not exist "I:\Carpeta" md "I:\Carpeta"
  5.  
  6. for %%@ in (*.mkv) do (
  7.  
  8. copy "%%@" "I:\Carpeta" /Y 1>nul & Echo El archivo: "%%@" fue copiado correctamente. || Echo Hubo un fallo al copiar el archivo "%%@".
  9.        echo.
  10.  
  11. )
  12.  
  13. pause>nul&exit

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.


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: [BATCH] Copiado con confirmacion de correcta escritura
« Respuesta #1 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
  1. copy /Y "%%@" "I:\Carpeta\" 1>nul 2>&1 && (
  2. Echo El archivo: "%%@" fue copiado correctamente.
  3. ) || (
  4. Echo Hubo un fallo al copiar el archivo "%%@".
  5. )

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.


« Última modificación: 24 Octubre 2013, 10:36 am por EleKtro H@cker » En línea



ovichan

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: [BATCH] Copiado con confirmacion de correcta escritura
« Respuesta #2 en: 24 Octubre 2013, 09:43 am »

Gracias, ya imaginaba yo q lo habría hecho mal jeje.
En línea

ovichan

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: [BATCH] Copiado con confirmacion de correcta escritura
« Respuesta #3 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
  1. :: Hacer lista en la unidad destino
  2. if exist "E:\Dragon Box GT\I\lista.txt" erase "E:\Dragon Box GT\I\lista.txt"
  3.  
  4. For %%@ in ("E:\Dragon Box GT\I\*.mkv") do (
  5. echo %%~n@>>"E:\Dragon Box GT\I\lista.txt"
  6. )
  7.  
  8. :: Otra fase
  9. for %%@ in (*.mkv) do (
  10. if not exist "I:\Dragon Ball GT\%%@" (
  11. cd "E:\Dragon Box GT\I\"
  12.  
  13. for /f "tokens=1,2 delims=][" %%i in (lista.txt) do (
  14.  
  15. set destino=%%j
  16.  
  17. for /f "tokens=1,2 delims=][" %%a in ("%%@") do (
  18. set original=%%b
  19. call echo %%original%%
  20. call echo %%destino%%
  21. if %original%=%destino% erase ....
  22. )
  23.  
  24. )
  25.  
  26. rem copy "%%@" "I:\Dragon Ball GT" /Y 1>nul 2>&1 && Echo El archivo: "%%@" fue copiado correctamente. || Echo Hubo un fallo al copiar el archivo "%%@".
  27. )
  28. )

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.
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: [BATCH] Copiado con confirmacion de correcta escritura
« Respuesta #4 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!
En línea



ovichan

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: [BATCH] Copiado con confirmacion de correcta escritura
« Respuesta #5 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.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Mal copiado de DVD???
Multimedia
ArKaNe_1 2 2,130 Último mensaje 16 Octubre 2004, 03:19 am
por ArKaNe_1
[BATCH]Pedido utilidad de copiado por Linea de comandos.
Scripting
FranciskoAsdf 3 4,453 Último mensaje 31 Marzo 2011, 15:03 pm
por FranciskoAsdf
[Solucionado][BATCH]Problema con escritura en archivo.
Scripting
FranciskoAsdf 4 3,285 Último mensaje 1 Abril 2011, 14:55 pm
por FranciskoAsdf
Protección de copiado de CD
Ingeniería Inversa
.:UND3R:. 0 10,774 Último mensaje 24 Noviembre 2011, 07:27 am
por .:UND3R:.
Ayuda con Batch de Copiado
Scripting
_CrisiS_ 0 2,202 Último mensaje 14 Enero 2022, 15:38 pm
por _CrisiS_
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines