Ms-Dos - leer la fecha de creación de un archivo y ponérsela a otro archivo

   
Vista:

leer la fecha de creación de un archivo y ponérsela a otro archivo

Publicado por Josu (4 intervenciones) el 13/01/2018 13:27:06
Me gustaría saber como desde un batch se puede leer la fecha de creación de un archivo (primero.doc) y ponérsela a otro (segundo.doc).
Si no se puede poner al segundo archivo la fecha, al menos saber como guardarla en una variable con formato DD-MM-AAA
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

leer la fecha de creación de un archivo y ponérsela a otro archivo

Publicado por Antoni Masana (511 intervenciones) el 14/01/2018 17:59:31
En Windows un archivo tiene tres fechas básicas que puedes ver con el exploradora saber:
- Fecha de creación
- Fecha de acceso
- Fecha modificación

Desde la ventana de comandos solo puedes ver la de modificación que es la que se ha visto siempre.

Con el FOR puedes saber la fecha y la hora de la ultima modificación de un archivo.

Para poner la fecha y hora a otro fichero deberías modificar la fecha, la hora y el fichero y desde un BAT va a ser complicado pero antes de continuar:

¿Qué finalidad tiene todo esto?

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

leer la fecha de creación de un archivo y ponérsela a otro archivo

Publicado por Josu (4 intervenciones) el 17/01/2018 22:09:41
Ante un proceso masivo de conversión a PDF y dado que después los PDF resultantes serán indexados y la fecha de creación será un dato a tener en cuenta para ordenar los resultados de la busqueda.
De otro modo todos los documentos indexados tienen la misma antigüedad.
Cada documento PDF recibirá la fecha de creación del documento doc docx xls.. del que procede.

Esto se realizara dentro de un árbol de directorios.
En cada directorio subdirectorio se encuentran tanto los originales como los PDF generados.

Este es el motivo de mi consulta.

Gracias anticipadas.
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

leer la fecha de creación de un archivo y ponérsela a otro archivo

Publicado por Antoni Masana (511 intervenciones) el 18/01/2018 11:25:43
Si lo entiendo bien para cada documento *.DOC* y *.XLS* existe un fichero PDF.
Estos últimos tienen todos la misma fecha y quieres que tengan la fecha de su documento original.

Creo que esto hace lo que quieres, pero OJO, antes de probarlo as una copia de todos los documentos porque si falla podrías perderlos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
FOR %%a in (*.doc* *.xls) do call :Cambia "%%~na" %%~ta
goto :eof
 
:Cambia
   set Fech=%Date%
   set Hora=%Time%
   set Nomb=%1
   date %2
   time %3
   type %Nomb%.PDF >%Nomb%.NEW
   date %Fech%
   time %Hora%
   del  %Nomb%.PDF
   ren  %Nomb%.NEW %Nomb%.PDF
   goto :eof

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

leer la fecha de creación de un archivo y ponérsela a otro archivo

Publicado por josu (4 intervenciones) el 18/01/2018 12:56:31
Realmente se queda uno con la boca abierta.
Muchas gracias.
Lo hace perfecto.
Si entiendo bien el código, lo que hace es engañar en el momento de la creación de los dicheros cambiando la fecha que previamente se ha almacenado para volverla a restablecer.

Estoy intentando que sea recursivo, pero me crea los ficheros de destino en el raíz desde el que se ejecuta el programa

Para evitarlo he intentado:

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
@echo off
 
 
miruta=c:\Equipo
 
REM FOR %%a in (*.doc* *.xls) do call :Cambia "%%~na" %%~ta
 
FOR /R %miruta% %%a in (*.doc* *.xls) do call :Cambia "%%~na" %%~ta "%%~pa"  "%%~da"
 
goto :eof
 
:Cambia
   set Fech=%Date%
   set Hora=%Time%
   set Nomb=%1
   set ruta=%4
   set unid=%5
   date %2
   time %3
   type %unid%%ruta%%Nomb%.PDF > %unid%%ruta%%Nomb%.NEW
   date %Fech%
   time %Hora%
   del  %unid%%ruta%%Nomb%.PDF
   ren  %unid%%ruta%%Nomb%.NEW %unid%%ruta%%Nomb%.PDF
   goto :eof

Resultado de mi variación:
No realiza el ultimo cambio de renombrado de NEW a PDF y además los NEW aparecen con tamaño = 0

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

leer la fecha de creación de un archivo y ponérsela a otro archivo

Publicado por Antoni Masana (511 intervenciones) el 18/01/2018 20:14:20
Esto es lo que buscas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@echo offx
SET miruta=c:\Equipo
FOR /R %miruta% %%a in (*.doc* *.xls) do call :Cambia %%~da "%%~pa" "%%~na" %%~ta
goto :eof
 
:Cambia
   set Fech=%Date%
   set Hora=%Time%
   set Disk=%1
   set Ruta=%2
   set Nomb=%3
   set Ruta=%Ruta:~1,-1%
   set Nomb=%Nomb:~1,-1%
   date %4
   time %5
   type "%Disk%%Ruta%%Nomb%.PDF" > "%Disk%%Ruta%%Nomb%.NEW"
   date %Fech%
   time %Hora%
   del "%Disk%%Ruta%%Nomb%.PDF"
   ren "%Disk%%Ruta%%Nomb%.NEW"  "%Nomb%.PDF"
   goto :eof

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

leer la fecha de creación de un archivo y ponérsela a otro archivo

Publicado por josu (4 intervenciones) el 20/01/2018 20:20:14
Gracias de nuevo.
Funciona perfecto.
Me sigue costando entender como funciona el paso de valores entre variables, bucles..
De verdad muy ilustrativo. 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

leer la fecha de creación de un archivo y ponérsela a otro archivo

Publicado por Antoni Masana (511 intervenciones) el 21/01/2018 20:21:29
Te explico esta línea que es la parte que no entiendes:

1
FOR /R %miruta% %%a in (*.doc* *.xls) do call :Cambia %%~da "%%~pa" "%%~na" %%~ta

Empiezo desde el principio el FOR con la opción /R (recursive)

Guía el directorio del árbol de raíz a [unidad:]ruta, ejecutando la instrucción FOR en cada directorio del árbol.
Si no se especifica el directorio después de /R entonces se asume que es el directorio actual.
Si el conjunto es solamente un simple carácter de punto (.) entonces enumerará el árbol del directorio.

El CALL

Cuando un programa BAT llama a otro BAT al finalizar el segundo NO vuelve al primero en el punto que lo llamo.
Para que vuelva desde donde se le llamo se usa el comando CALL

El CALL antiguamente solo se podía utilizar para llamar a otro BAT ¿pero que pasa si se quiere ejecutar un trozo de lineas varias veces desde el mismo BAT sin crear un segundo BAT? Habían varias formas de hacerlo a cual mas pedestre.

Te contare una que es en la que se ha convertido el CALL:

El CALL llamaba a propio BAT o dicho de otra forma el BAT se llamaba a si mismo y se pasaba parámetros y al principio del BAT se miraba si habían parámetros y saltaba a una línea determinada se ejecutaba y volvia al punto de partida:

Te voy a poner un ejemplo de como funciona Ahora como funcionaba antiguamente:

AHORA:
1
2
3
4
5
6
7
8
9
10
@echo off
echo.Inicio
echo.Mi nombre es: %0
call :Etiqueta PaRaMeTrO
echo.Finalizo
goto:EOF
:Etiqueta
   echo.Esto es una etiqueta
   echo.Este es mi parametro - %1 -
   goto :EOF

RESULTADO:
1
2
3
4
5
Inicio
Mi nombre es: z1
Esto es una Etiqueta
Este es mi parametro - PaRaMeTrO -
Finalizo

ANTES:
1
2
3
4
5
6
7
8
9
10
11
@echo off
echo.Inicio
if not "%1" == "" goto %1
echo.Mi nombre es: %0
call %0 Etiqueta PaRaMeTrO
echo.Finalizado
goto Fin
:Etiqueta
   echo.Esto es una etiqueta
   echo.Este es mi parametro - %2 -
:Fin

RESULTADO:
1
2
3
4
5
6
Inicio
Mi nombre es: z2
Inicio
Esto es una etiqueta
Este es mi parametro - PaRaMeTrO -
Finalizado

En el primer BAT se ha convertido el Call %0 Etiqueta por call :Etiqueta y hace lo mismo que el IF que hay al principio del segundo BAT sin necesidad de ponerla y como no lo vuelve a llamar la palabra Inicio solo sale una vez en el primer bat y dos en el segundo.
Si le quitas la línea de Inicio los dos BATS hacen lo mismo.
El goto :EOF equivale a un GOTO a la ultima línea física del BAT.

Espero haberme explicado y que se pueda entender y lo mejor para entender es usar la opción /? con los comandos para ver la ayuda y hacer pruebas para entenderlo mejor.

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
Revisar política de publicidad