Ms-Dos - Batch para comprar dos archivos en red bajo su fecha de creacion

 
Vista:
sin imagen de perfil

Batch para comprar dos archivos en red bajo su fecha de creacion

Publicado por Jesus (3 intervenciones) el 24/09/2016 23:07:22
Hola estaba realizando un bat para entrar a una unidad de red y comprar dos archivos ejm

Pos_release.exe == Pos_release.exe la única forma de diferenciar cual esta des actualizado es bajo la fecha de creacióny lo mande a un log para saber cual actualizar, pero por alguna misteriosa razón no me queda, agradecería de su apoyo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@echo off
net use W: \\10.10.16.162\c$
set remote=10.10.16.162
set file1=W:\archivos\pos_release.exe
set file2=C:\pos_release1.exe
for %%i in (%file1%) do set date1=%%~ti
for %%i in (%file2%) do set date2=%%~ti
 
if "%date1%"=="%date2%" (
echo "las fechas son iguales" && goto end
) else
(
for /F %%i in ('dir /B /O:D  %file1% %file2%') do set newest=%%i
if "%newest%"=="%file2%" (
	goto logit
)else
(
goto end
)
)
 
:logit
echo %remote% >> logJesus
pause
:end
pause
net use W: /delete /yes
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

Batch para comprar dos archivos en red bajo su fecha de creacion

Publicado por Antoni Masana (811 intervenciones) el 25/09/2016 16:17:25
El comando FOR y el SET no se llevan muy bien juntos.

Prueba esto


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@echo off
net use W: \\10.10.16.162\c$
set remote=10.10.16.162
set file1=W:\archivos\pos_release.exe
set file2=C:\pos_release1.exe
for %%i in (%file1%) do set date1=%%~ti
for %%i in (%file2%) do set date2=%%~ti
 
if "%date1%"=="%date2%" (
   echo "las fechas son iguales"
   goto end
)
 
for /F %%i in ('dir /B /O:D  %file1% %file2%') do call :Verif %%i
goto End
 
:Verif
    set newest=%1
    if "%newest%"=="%file2%"	goto logit
    goto:EOF
 
:logit
    echo %remote% >> logJesus
    pause
:end
    pause
    net use W: /delete /yes


Creo que el %%~ti devuelve la fecha de modificación y no la de creación pero siendo EXE quizas sean la misma.

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
sin imagen de perfil

Batch para comprar dos archivos en red bajo su fecha de creacion

Publicado por Jesus (3 intervenciones) el 25/09/2016 21:19:14
Muchas Gracias corre muy bien, pero tengo una pregunta como agrego un IF Else para validar en caso de que no sean iguales y me genere un log con la IP origen del archivo que no es igual a Pos_release1.exe en el código que me proporcionaste no manda ningún archivo al log, sabes si algo estaría mal? espero me puedas apoyar y muchas gracias.
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

Batch para comprar dos archivos en red bajo su fecha de creacion

Publicado por Antoni Masana (811 intervenciones) el 26/09/2016 06:36:06
Si llega a la línea 15, la del GOTO End es que no se cumple la igualdad de la línea 19.

Pero estas cometiendo un error de interpretación. Estas comparando dos cadenas de caracteres, es decir.

Esta condición NUNCA dará un resultado de igual aunque sea el mismo fichero, porque estas comparando texto.

1
if "W:\archivos\pos_release.exe" == "C:\pos_release1.exe"     goto logit

Esta condición SIEMPRE dará un resultado de igual aunque sean diferentes ficheros, porque estas comparando texto.

1
if "C:\pos_release1.exe" == "C:\pos_release1.exe"     goto logit

Para saber si son el mismo fichero:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@echo off
net use W: \\10.10.16.162\c$
set remote=10.10.16.162
set file1=W:\archivos\pos_release.exe
set file2=C:\pos_release1.exe
for %%i in (%file1%) do set date1=%%~ti
for %%i in (%file2%) do set date2=%%~ti
 
if "%date1%"=="%date2%" (
   echo "las fechas son iguales"
   goto end
)
 
: --- Compara los ficheros para saber si son iguales
 
FC %file1% %file2% >NUL 2>&1
   IF %ERRORLEVEL% == 1  GOTO Diferentes
                         GOTO Son_guales
 
:Son_Iguales
    echo "Los ficheros son IGUALES"
    goto End
 
:Diferentes
    echo "Los ficheros son DIFERENTES"
    Goto End
 
:End
    pause
    net use W: /delete /yes >nul 2>&1

FC compara el contenido de los ficheros y si son iguales devuelve 0 y si son diferentes 1, este valor se captura con la variable ERRORLEVEL

Se puede simplificar así:

1
2
3
4
5
6
7
8
9
10
11
12
13
: --- Compara los ficheros para saber si son iguales
 
FC %file1% %file2% >NUL 2>&1
   IF %ERRORLEVEL% == 1  GOTO Diferentes
      echo "Los ficheros son IGUALES"
      goto End
 
:Diferentes
    echo "Los ficheros son DIFERENTES"
 
:End
    pause
    net use W: /delete /yes >nul 2>&1

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
sin imagen de perfil

Batch para comprar dos archivos en red bajo su fecha de creacion

Publicado por Jesus (3 intervenciones) el 26/09/2016 21:27:14
Excelente me funciono muy bien, una pregunta mas espero no abusar de tu conocimiento tengo que validar los archivos Pos_release.exe de un aproximado de 800 pc's por lo que tendría que copiar el codigo y modificar la IP para cada una, como se puede agregar un For para que repita el ciclo por las IP's que yo le agregue. Saludos. y Muchas Gracias.
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

Batch para comprar dos archivos en red bajo su fecha de creacion

Publicado por Antoni Masana (811 intervenciones) el 27/09/2016 07:48:11
Puedes hacerlo de dos formas pasarlos por parámetro o crear un fichero con la lista de IP o uno que acepte una IP o un fichero.

Pongo parte del BAT para no hacerlo muy largo.

OPCIÓN - 1

1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
:Main
   if "%1" == "" GOTO :EOF
   call :Compara %1
   shift
   goto Main
 
:Compara
   set Remote=%1
   net use W: \\%Remote%\c$
   set file1=W:\archivos\pos_release.exe
   set file2=C:\pos_release1.exe
...


OPCIÓN - 2

1
2
3
4
5
6
7
8
9
10
@echo off
   IF "%1" == "" GOTO :EOF
   IF NOT EXIST %1 GOTO :EOF
 
   FOR /F %%a IN (%1) DO CALL :Compara %%a
   GOTO :EOF
 
:Compara
   set Remote=%1
...


OPCIÓN - 3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@echo off
IF "%1" == "" GOTO :EOF
IF  EXIST %1 GOTO File
 
:Main
   IF "%1" == "" GOTO :EOF
   call :Compara %1
   shift
   goto Main
 
:File
   FOR /F %%a IN (%1) DO CALL :Compara %%a
   GOTO :EOF
 
:Compara
   set Remote=%1
...


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

Batch para comprar dos archivos en red bajo su fecha de creacion

Publicado por lacaraloca (2 intervenciones) el 27/09/2016 18:57:42
Hola, si no les causaria mucha molestia, estoy interesado en este proceso
Si no les molestaria me podrian explicar un poco sus pasos y comandos?
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

Batch para comprar dos archivos en red bajo su fecha de creacion

Publicado por Antoni Masana (811 intervenciones) el 28/09/2016 07:56:15
Buenos días lacaraloca2,

Aqui te pongo la versión completa. Esta versión acepta como parámetro una IP o un ficheros con una o varias IP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
@echo off
IF "%1" == "" GOTO :EOF
IF  EXIST %1 GOTO File
 
:Main
   IF "%1" == "" GOTO :EOF
   call :Compara %1
   shift
   goto Main
 
:File
   FOR /F %%a IN (%1) DO CALL :Compara %%a
   GOTO :EOF
 
:Compara
   set Remote=%1
   net use W: \\%Remote%\c$
   set file1=W:\archivos\pos_release.exe
   set file2=C:\pos_release1.exe
 
for %%i in (%file1%) do set date1=%%~ti
for %%i in (%file2%) do set date2=%%~ti
 
if "%date1%"=="%date2%" (
   echo "las fechas son iguales"
   goto end
)
 
: --- Compara los ficheros para saber si son iguales
 
FC %file1% %file2% >NUL 2>&1
   IF %ERRORLEVEL% == 1  GOTO Diferentes
                         GOTO Son_guales
 
:Son_Iguales
    echo "Los ficheros son IGUALES"
    goto End
 
:Diferentes
    echo "Los ficheros son DIFERENTES"
    Goto End
 
:End
    pause
    net use W: /delete /yes >nul 2>&1

Forma de ejecutar el BAT (lo llamare COMPARA.BAT)

1
2
3
C:\TMP\> COMPARA 192.168.100.23
o
C:\TMP\> COMPARA LISTA_IP.TXT

Como el BAT es muy largo y seguro que hay cosas que ya sabes, dime que es lo que no entiendes y te lo explico.

Utiliza el parámetro /? para consultar la ayuda de un comando y ver que hace.

Ejemplo:

1
2
3
4
5
6
FOR   /?
SET   /?
IF    /?
CALL  /?
GOTO  /?
SHIFT /?

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