Ms-Dos - bat que copie archivos uno a uno

 
Vista:

bat que copie archivos uno a uno

Publicado por Carlos Iguaran (5 intervenciones) el 11/09/2013 17:39:13
Saludo a todos. Soy nuevo en esto de generacion de archivos bat.
tengo un archivito bat que lo que hace es copiar de una carpeta a otra por la red archivos txt y renombralos despues de copiado, sucede que en algunos momentos esta copia no se realiza lo que genera un inconveniente para procesar dichos archivos quiero saber si es posible hacer la copia uno a uno de los archivo asi como tambien la accion de renombrarlos, en caso de encontrar un error en la copia de algun archivo detener la copia pero no perder los que ya se han renombrado ni copiado. lo he probado con error level pero al momento en que encuentra un error en la copia termina la ejecucion pero no renombra ningun archivo pero si pasa algunos de los txt. la idea es si no puede renombra todos los archivos que tampoco copie los txt aunque esto puede solventarse si la copia se hace uno por uno y se renombra uno por uno. Adjunto el bat actual.

u:
cd recreacion
cd zeus
copy *.txt T:
REN *.TXT *.CAR
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

bat que copie archivos uno a uno

Publicado por Antoni Masana (811 intervenciones) el 12/09/2013 08:24:06
Hay una cuestión que no me queda clara ¿Que clase de error se produce en la copia?

Esto podria dar un poco de control a la copia.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@ECHO OFF
 
SET Orig=U:\Recreación\Zeus
SET Dest=T:
 
IF not exist %Orig%\nul GOTO:EOF
IF not exist %Dest%\nul GOTO:EOF
 
CD /D %Orig%
 
FOR %%a IN (*.TXT) DO GOTO :Copia %%a
C:\
GOTO:EOF
 
:Copia
   copy %1 %Dest% /Y /A /V
   IF EXIST %Dest%\%1  REN %1 *.car
   GOTO:EOF

¿Que hace?

- Verifica que exista el origen ( IF )
- Verifica que exista el destino ( IF )
- Se coloca en el Origen ( CD )
- procesa cara uno de los ficheros txt ( FOR )
- Copia el fichero al destino y si existe lo sobreescribe ( COPY )
- Verifica que existe en el destino ( IF )
- Renombra el origen ( REN )

NOTAS

GOTO:EOF - Salida del bat
CD /D x:\xxx - Cambia de disco y directorio
GOTO :xxx - Salta a la etiqueta y regresa donde estaba.

No se si he entendido exactamente el problema que tienes ni que clase de errores se producen ni el porque los hay.

Si esto no cumple tus expectativas lo revisamos.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

bat que copie archivos uno a uno

Publicado por Carlos Iguaran (5 intervenciones) el 13/09/2013 17:26:51
Antoni gracias por tu respuesta.
Puse en el BAt lo enviado por ti pero al momento de ejecutarlo me muestra estos mensajes:

U:\Recreacion\zeus>FOR %a IN (*.TXT) DO GOTO :Copia %a

U:\Recreacion\zeus>GOTO :Copia em_ca98_11092013_4939978762.txt

U:\Recreacion\zeus>copy T:\Procesados /Y /A /V
T:\Procesados\*
El sistema no puede encontrar el archivo especificado.
0 archivo(s) copiado(s).

U:\Recreacion\zeus>IF EXIST T:\Procesados\ REN *.car
La sintaxis del comando no es correcta.

U:\Recreacion\zeus>GOTO:EOF

no se dodne pueda estar el error como ves si esta carrgando a la variable a el archivo a copiar pero al momento de la copia y renm,bre del arcghivo muestra el error no se, y esto hace parte de la ignorancia mia sobre el tema de bat, si es que que cuando salta a la etiqueta no esta pasando el archivo que se debe copiar y por esto sale el error. Agradezco de antemano tu colaboracion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

bat que copie archivos uno a uno

Publicado por Antoni Masana (811 intervenciones) el 16/09/2013 06:52:24
He cometido un pequeño error:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@ECHO OFF
 
SET Orig=U:\Recreación\Zeus
SET Dest=T:
 
IF not exist %Orig%\nul GOTO:EOF
IF not exist %Dest%\nul GOTO:EOF
 
CD /D %Orig%
 
FOR %%a IN (*.TXT) DO CALL :Copia %%a
C:\
GOTO:EOF
 
:Copia
   copy %1 %Dest% /Y /A /V
   IF EXIST %Dest%\%1  REN %1 *.car
   GOTO:EOF


He puesto una instrucción por otra

Saludos y lo siento
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

bat que copie archivos uno a uno

Publicado por Carlos iguaran (5 intervenciones) el 16/09/2013 23:20:03
Antoni eres un crack. luego de tu correccion funca perfecto y es exactamente la orientacion que buscaba, una ultima consulta para completar y dar por cerrado el tema.
Si quisiera poner una linea que me genere un archivo log en caso de algun error como la pondria.

De antemano millones de gracias por tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

bat que copie archivos uno a uno

Publicado por Antoni Masana (811 intervenciones) el 17/09/2013 06:59:53
El primer >> recoge el mensaje estandard y el segundo 2>> recoge el mensaje de error.

El COPY es el que genera mensaje y los puntos donde se pueden producir errores son los dos sitios en los que he puesto el LOG.

El uso de una variable facilita la lectura y el cambio de nombre.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@ECHO OFF
 
SET Orig=U:\Recreación\Zeus
SET Dest=T:
SET Log=C:\Mi_Log.txt
 
IF not exist %Orig%\nul GOTO:EOF
IF not exist %Dest%\nul GOTO:EOF
 
CD /D %Orig%
 
FOR %%a IN (*.TXT) DO CALL :Copia %%a
C:\
GOTO:EOF
 
:Copia
   COPY %1 %Dest% /Y /A /V          >>%LOG% 2>>%LOG%
   IF EXIST %Dest%\%1  REN %1 *.car >>%LOG% 2>>%LOG%
   GOTO:EOF
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

bat que copie archivos uno a uno

Publicado por Carlos Iguaran (5 intervenciones) el 17/09/2013 17:50:24
Gracias por tus respuestas Antoni.
ejecute el bat tal como me lo pones aui y me muestra este mensaje:
Acceso denegado.
Acceso denegado.
Acceso denegado.
Acceso denegado.
Acceso denegado.
Acceso denegado.
Acceso denegado.
Acceso denegado.
Acceso denegado.
Acceso denegado.
Acceso denegado.
"C:\" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.
que puede ser?
gracias por tu paciencia y ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

bat que copie archivos uno a uno

Publicado por Antoni Masana (811 intervenciones) el 18/09/2013 07:21:04
La verdad es que no lo probe y cuando no lo haces por que estas muy seguro de averlo hecho bien misteriosamente siempre hay errores.

Te marco los cambios, no mejor dicho las correcciones que he realizado.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@ECHO OFF
 
SET Root=%CD%
SET Orig=C:\LWP
SET Dest=C:\Temp
SET Log=C:\popo.txt
SET Err=C:\popo.err
 
IF not exist %Orig%\nul GOTO:EOF
IF not exist %Dest%\nul GOTO:EOF
 
CD /D %Orig%
 
   FOR %%a IN (*.TXT) DO CALL :Copia %%a
 
CD /D %Root%
GOTO:EOF
 
:Copia
   COPY %1 %Dest% /Y /A /V          >>%LOG% 2>>%Err%
   IF EXIST %Dest%\%1  REN %1 *.car >>%LOG% 2>>%Err%
   GOTO:EOF


El SET Root es para que se quede al finalizar donde estaba
El SET Err es para arregler el acceso denegado. El primer >> bloque el fichero y no deja que el 2>> lo abra

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

bat que copie archivos uno a uno

Publicado por Carlos Iguaran (5 intervenciones) el 19/09/2013 16:02:06
Anotini mil y mil gracias por toda tu ayuda, eres un crack aqui pongo como deje el bat y que me funciono perfectamente sin tu ayuda no lo hubiera podido hacer:
@ECHO OFF

SET Root=%CD%
SET Orig=U:\Recreacion\zeus
SET Dest=T:\Procesados
SET Log=D:\log.txt
SET Err=D:\log.err


IF not exist %Orig%\nul GOTO:EOF
IF not exist %Dest%\nul GOTO:EOF

CD /D %Orig%

FOR %%a IN (*.TXT) DO CALL :Copia %%a
CD /D %Root%
GOTO:EOF

:Copia
COPY %1 %Dest% /Y /A /V >>%Log% 2>>%Err%
IF EXIST %Dest%\%1 REN %1 *.CAR >>%Log% 2>>%Err%
GOTO:EOF
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar