Ayuda sobre programacion BATCH

Iniciado por DanielB, 6 Marzo 2008, 06:12 AM

0 Miembros y 1 Visitante están viendo este tema.

DanielB

He leido las ayudas del foro, pero no puedo hacer un programa en batch que lea uno a uno LOS ARCHIVOS de un determinado directorio del disco "C" y los compare con un archivo del disco "D" (para saber si el contenido de ambos archivos son iguales).
Pero el programa deberia evaluar previamente si ese archivo (del disco "C") existe en el disco "D". POR FAVOR AYUDENME
Gracias

leogtz

Hola supongo que ya habras estudiado un poco el comando FC para comparar dos archivos y mostrar sus diferencias..

FC /?
Para ver la ayuda del Comando.

Y respecto a lo de a lo de evaluar si el archivo del disco c: esta en d:, no le veo caso, ya que se supone que vamos a comparar archivos diferentes, y no necesitas tener el archivo1 que esta en c: en d:...

El programa revisara si existen los archivos que quieres comparar, si no, te devuelve error.

Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

DanielB

#2
Primero, GRACIAS por contestar. Conozco el comando FC, pero mi problema radica en lo siguiente:

1) Tengo un subdirectorio en el disco "C" con 250 archivos aproximadamente y en el "D" tengo casi lo mismo o menos. Ej: C:\sudir\file1, C:\sudir\file2, C:\sudir\file3, C:\sudir\file4, ... y asi sucesivamente hasta C:\sudir\file250 y en el disco "D" (es un disco extraible ~ backup) tengo D:\sudir\file1, C:\sudir\file4, C:\sudir\file5, ... y asi sucesivamente hasta file250. Como podras ver en el disco "D" falta el file2 y el file3.

2) Debido a que se han modificado algunos archivos tanto en "C" como en "D" indiscriminadamente, yo debo encontrar cuales son los archivos que son iguales (en su contenido, es decir, la informacion que contiene el archivo) tanto en "C" como en "D", es decir si:
      C:\sudir\file1  = D:\sudir\file1  son iguales
      C:\sudir\file2  ---> NO EXISTE EN EL "D" el programa en BATCH deberia contemplarmelo
      C:\sudir\file3  ---> NO EXISTE EN EL "D" idem anterior
      C:\sudir\file4  = D:\sudir\file4  son distintos
      C:\sudir\file5  = D:\sudir\file5  son iguales
y asi sucesivamente hasta el file250. Por supuesto que la salida deberia ser otro archivo llamado por ejemplo "salida.tmp" en donde pueda saber cuales son iguales, cuales distintos y cuales faltan en el "D".

Obviamente no quiero hacerlo uno por uno, por eso pense que podria hacerlo en un BATCH en forma automatica, pero me resulta muy dificil y de ahi que necesito ayuda.
Espero haya sido lo suficientemente claro.
GRACIAS


leogtz

Hola, entiendo lo que me quieres decir, pero no se como aplicarlo...

Supongamos que los archivos tienen nombre asi:
file1, file2, file3, file4.

Podrias usar IF:
IF [NOT] EXIST archivo comando Else "haz esto"


Si existe el archivo, los compararia, si no existe le pones que te muestre un mensaje de que no haya y se vaya a la siguiente linea.

Pero no se como ponerlo para que sea mas automatico como tu quieres... :-\

Ya me quede con la duda... :huh:
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

DanielB

#4
ok con lo del "IF", pero...como haces para pasar la salida que te da el "dir /b" y pasarlo como parametro uno por uno al "IF". Yo probe hacer lo siguiente y me dio error.

dir c:\subdir\*.* /b | if exist d:\"salida del dir" (fc .......) else (echo el archivo no existe)

Como resuelvo esta situacion: pasar uno por uno los nombres de los archivos que me da el "dir" y pasarlos al "fc".

Gracias de nuevo

leogtz

#5
Hola disculpa por la tardanza.

Aver si te sirve esta idea.
Que tal si hacemos un dir /b y lo direccionamos a .txt
@echo off
dir /b>dir.txt
For /f "tokens=2 delims=:" %%a in ('FIND /I " LoQueQuieresEncontrar" dir.txt') do (set pa=%%a)
Y aqui irian los demas comandos usando la variable %pa%


Es solo una idea...
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

DanielB

Hola mi amigo. No tienes por que disculparte. Voy a probarlo. Gracias por la ayuda.  GRACIAS