Extraer la fecha con Ms-DOS

Resuelto
van' -  
 fafa90 -
Hola,
estoy buscando extraer la fecha de hoy en el formato dd_mm_aaaa y almacenar el resultado en una variable (que usaré para abrir un archivo con ese nombre).
¿Es posible esto??????

32 respuestas

  • 1
  • 2
Pitichat
 
Hola,

una forma extremadamente simple de obtener la fecha del sistema en el formato DD_MM_AAAA con MS-DOS en una sola línea en un batch es la siguiente:

set ladate=%date:/=_%

Aquí indicamos que se debe reemplazar / por _

Puedes ejecutar %date:/=_% en DOS y te mostrará la fecha en el formato DD_MM_AAAA.
9
fafa90
 
explicación muy clara, incluso para un neófito como yo
0
zorti
 
He intentado el método proporcionado por poulpenstring. Funciona para responder a toto. Hemos realizado un *.bat

set mon_fic=d:\tes-%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%.txt
echo tete> %mon_fic%

genera un archivo tes-20031208.txt. En DOS, al escribir help set
tendrás la ayuda en línea.
Zorti
7
eric
 
Hola a todos :)

He utilizado este tema para crear un lote de copia de seguridad automática.
El archivo a respaldar será renombrado con la fecha y luego la hora.

El código es el siguiente:
rename "%userprofile%\escritorio\FICHIER.xls" FICHIER.xls_%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%_%Time:~-11,-9%%Time:~-8,-6%%Time:~-5,-3%.xls


Lo que da como resultado un archivo llamado:
FICHIER_20040420_114238.xls

Todo funciona a la perfección desde las 10:00.00 hasta las 23:59.59 :))
Pero a partir del momento en que el dígito de las decenas (para la hora) pasa a 0 (es decir, 00h, 01h, hasta 09h), provoca un error :/

FICHIER_20040420_

Porque la variable que contiene las decenas está medio vacía, de hecho; está constituida por:
%Time:~-11,-10% => dígito de decenas
%Time:~-10,-9% => dígito de unidades
Cuando no hay decena, pues hay algo diferente a 1 o 2, pero ¿qué?

FICHIER_20040420_?14238.xls

¿Cuál es este carácter??

Si lo sé, puedo reemplazarlo por 0:

SET dizaine %Time:~-11,-10% If %dizaine% == "caracter_inconocido" SET %dizaine% 0


¡Muchas gracias por la ayuda o los consejos que puedan ofrecerme!
4
Leblanc philippe
 
Un pequeño ejemplo de lo que se puede hacer para XP/2000
(adaptable para otras versiones; extensible para el cálculo de la fecha de Pascua...)
Copiar/pegar las siguientes líneas en un archivo de texto para adaptar según las necesidades:
@echo off
REM ==============================================================================================================
REM RECUPERACIÓN DE LA FECHA DE ÚLTIMA CIERRE DE LAS CAJAS DE UNA LISTA DADA
REM --------------------------------------------------------------------------------------------------------------
REM HISTORIAL:
REM Creación 26/05/2007 Philippe LEBLANC
REM Modificación 28/05/2007 Philippe LEBLANC
REM Rediseño debido a que en la planificación de tareas no se devuelve ningún valor por las subrutinas
REM ==============================================================================================================
setlocal EnableDelayedExpansion
title RECUPERACIÓN DE LA FECHA DE ÚLTIMA CIERRE DE LAS CAJAS DE UNA LISTA DADA

REM ----- PARÁMETROS -------------------------------------
set path=%path%;c:\progra~1\tivoli\lcf\bin\w32-ix86\tools

REM Versión de windows
for /F "usebackq delims==" %%i in (`ver`) do set OSVER=%%i

REM Identificaciones windows XP y 2K
set USERADMIN=xxxxxxxxx
set ADMPASXP=yyyyyyyyy
set ADMPAS2K=zzzzzzzzz
set USERCAISSE=ttttttttt\CAISSE
set CAIPAS2K=uuuuuuuuu
set CAIPASXP=vvvvvvvvv

REM Archivo que contiene la lista de las cajas
set FichierCaisses=liste.csv
REM Archivo temporal que contiene la lista de las cajas ya tratadas
set FichierTemp=liste.tmp
set Lecteur=C$
REM Directorio de recuperación
set Repertoire=winstore
set Chemin=%Lecteur%\%Repertoire%
REM Archivo ini
set FichierData=Transferts.ini

REM Recuperación de la fecha y la hora
call :DateHeureSysteme
set Bissextile=0
set Semaine=0
set Journee=0
call :JourneeSemaineDate %Annee% %Mois% %Jour%
if "%Mois%" == "01" set NomMois=Enero
if "%Mois%" == "02" set NomMois=Febrero
if "%Mois%" == "03" set NomMois=Marzo
if "%Mois%" == "04" set NomMois=Abril
if "%Mois%" == "05" set NomMois=Mayo
if "%Mois%" == "06" set NomMois=Junio
if "%Mois%" == "07" set NomMois=Julio
if "%Mois%" == "08" set NomMois=Agosto
if "%Mois%" == "09" set NomMois=Septiembre
if "%Mois%" == "10" set NomMois=Octubre
if "%Mois%" == "11" set NomMois=Noviembre
if "%Mois%" == "12" set NomMois=Diciembre
if "%Journee%"=="1" set NomJour=Lunes
if "%Journee%"=="2" set NomJour=Martes
if "%Journee%"=="3" set NomJour=Miércoles
if "%Journee%"=="4" set NomJour=Jueves
if "%Journee%"=="5" set NomJour=Viernes
if "%Journee%"=="6" set NomJour=Sabado
if "%Journee%"=="7" set NomJour=Domingo

REM Creación del archivo log
set FichierLog=TransfertsIniCaisses_%aaaammjj%.log
echo %DateHeure% Inicio de la recuperación para el %NomJour% >> %FichierLog%

REM Prueba de lanzamiento por presencia del archivo que contiene la lista de las cajas
if not exist %FichierCaisses% (
echo %DateHeure% : No se puede recuperar porque el archivo que contiene la lista de cajas %FichierCaisses% está ausente. >> %FichierLog%
goto :SORTIE) else (echo.)
REM Prueba de lanzamiento diario según el día de la semana
if "%NomJour%"=="Sábado" (
echo %DateHeure% : No hay recuperación planificada el %NomJour%. >> %FichierLog%
goto :SORTIE) else (echo.)

REM Inicialización del archivo resultado
set FichierResultat=ResultatTransfertsIniCaisses_%aaaammjj%.txt
echo Caja;FechaCierre > %FichierResultat%

REM ----- BUCLE ------------------------------------------
REM Bucle de lectura del archivo de la lista de cajas
for /F "tokens=1,2 delims=;" %%i in (%FichierCaisses%) do (

REM Prueba del indicador 'ya tratado' del archivo de la lista de cajas
if %%j==O (echo %%i;O >> %FichierTemp%) else (

REM Conexión con la caja
net use \\%%i\ipc$ /user:%USERADMIN% %ADMPASXP% || net use \\%%i\ipc$ /user:%USERADMIN% %ADMPAS2K%
if ERRORLEVEL 1 (
echo %DateHeure% : %%i no conectada >> %FichierLog%
echo %%i;N >> %FichierTemp%) else (

REM Recuperación de la fecha de última cierre de la caja
call :DateClotureCaisse \\%%i\%Chemin%\%FichierData% %%i

)
REM Fin de conexión con la caja
net use \\%%i\ipc$ /d
)
REM Fin de la prueba del indicador 'ya tratado' del archivo de la lista de cajas
)
REM Fin del bucle de lectura del archivo de la lista de cajas
REM -------------------------------------------------------

REM Actualización del archivo de la lista de cajas
copy /Y %FichierTemp% %FichierCaisses%

REM Recuperación de la fecha y la hora
call :DateHeureSysteme

:SORTIE
REM Mensaje de log
echo %DateHeure% Fin de la recuperación para el %NomJour% >> %FichierLog%

REM Eliminación de archivos temporales
@del /q /f %FichierTemp%

REM Fin del tratamiento principal
goto :EOF
REM ==============================================================================================================

REM ----- SUBRUTINA ------------------------------------
:DateClotureCaisse
REM -------------------------------------------------------
REM Recuperación de la fecha de última cierre de la caja
REM parámetros: nombre del archivo de datos, nombre de la caja según el formato 'VEG'
REM
call :DateHeureSysteme
REM ----- BUCLE ------------------------------------------
REM Bucle de lectura del archivo de datos:
REM Búsqueda de la fecha atribuida a la cláusula 'DateDerniereCloture='
REM Inicialización de la variable 'DateCloture', nula si la cláusula no se encuentra
for /F "tokens=1,2 delims==" %%g in (%1) do (if %%g == DateDerniereCloture set DateCloture=%%h)
REM
REM Prueba de la variable 'DateCloture':
REM Escritura en el archivo resultado si la variable está informada
REM Actualización del archivo temporal que contiene la lista de cajas ya tratadas
if "%DateCloture%"=="" (
echo %DateHeure% : Fallo al leer la fecha de cierre de la caja %2 >> %FichierLog%
echo %2;N >> %FichierTemp%) else (
echo %2;%DateCloture% >> %FichierResultat%
echo %2;O >> %FichierTemp%)
REM
REM ----- Fin de la subrutina
goto :EOF

REM ----- SUBRUTINA ------------------------------------
:DateHeureSysteme
REM -------------------------------------------------------
REM Recuperación de la fecha y la hora del sistema
REM según la versión del SO, Windows 2000 o XP
if "%OSVER:~18,2%"=="XP" (
set Annee=%DATE:~6,4%
set Mois=%DATE:~3,2%
set Jour=%DATE:~0,2%
set Heure=%TIME:~0,2%
set Minutes=%TIME:~3,2%
set Secondes=%TIME:~6,2%) else (
if "%OSVER:~18,4%"=="2000" (
set Annee=%DATE:~11,4%
set Mois=%DATE:~8,2%
set Jour=%DATE:~5,2%
set Heure=%TIME:~0,2%
set Minutes=%TIME:~3,2%
set Secondes=%TIME:~6,2%))
if %Heure% LSS 10 set Heure=0%Heure:~1,1%
REM
set DateHeure=%Jour%/%Mois%/%Annee% - %Heure%:%Minutes%:%Secondes%
set aaaammjj=%Annee%%Mois%%Jour%
REM
REM ----- Fin de la subrutina
goto :EOF

REM ----- SUBRUTINA ------------------------------------
:JourneeSemaineDate
REM -------------------------------------------------------
REM Recuperación de los elementos de fecha tales como
REM el día bisiesto del año,
REM el ordinal de la semana del año,
REM el ordinal del día de la semana
set yy=%1
set mm=%2
set dd=%3
set ly=0
set /a lx=%yy% %% 4
if %lx% EQU 0 set ly=1
set /a lx=%yy% %% 100
if %lx% EQU 0 set ly=0
set /a lx=%yy% %% 400
if %lx% EQU 0 set ly=1
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,Jd=153*m+2
set /a Jd=Jd/5+dd+y*365+y/4-y/100+y/400-32045
set /a y=yy+4798,Jp=y*365+y/4-y/100+y/400-31738,t=Jp+3,Jp=t-t%%7
set /a y=yy+4799,Jt=y*365+y/4-y/100+y/400-31738,t=Jt+3,Jt=t-t%%7
set /a y=yy+4800,Jn=y*365+y/4-y/100+y/400-31738,t=Jn+3,Jn=t-t%%7
set /a Jr=%Jp%,yn=yy-1,yn+=Jd/Jt,yn+=Jd/Jn
if %Jd% GEQ %Jn% (set /a Jr=%Jn%) else (if %Jd% GEQ %Jt% set /a Jr=%Jt%)
set /a diff=Jd-Jr,cw=diff/7+1,wd=diff%%7,wd+=1
if %cw% LSS 10 set cw=0%cw%
REM
set %Bissextile%=%ly%
set Semaine=%cw%
set Journee=%wd%
REM echo yyyy: [%yy%] mm: [%mm%] dd: [%dd%] wd: [%wd%] cw: [%Semaine%] ly: [%Bissextile%]
REM
REM ----- Fin de la subrutina
goto :EOF
3
poulpenstring Mensajes publicados 32 Estado Miembro 33
 
Bravo y gracias Philippe, por este ejemplo generoso en términos de código y comentarios, que me apuro a copiar/pegar en caso de necesidad.
Que tengas un buen día.
3
Alodar
 
Gracias, he propuesto esto en todos los sitios de "CodeS-SourceS" y me han echado! con el pretexto de que no encajaba en ninguna categoría... ¡qué les den!#§@?
0
poulpenstring
 
Hola,

Una pequeña aclaración sobre el manejo de las fechas... Me he dado cuenta de que, lamentablemente, según el sistema operativo los resultados son diferentes, e incluso no funcionales. Se trata, por supuesto, del "dos" que puede ser diferente dependiendo de si estás en ... win95, win98, win98SE, 2000 o XP.

Por ejemplo, en 95 y algunas versiones de 98 la función "date /T" no funciona y es imposible obtener la fecha sin esperar una respuesta...(por eso creo que se hizo el /T).

De todos modos, siempre hay una posibilidad, incluso buscar en la red funciones Unix que funcionen en ms/dos.

Buenas noches
2
Mbt
 
Hola,
Si quieres jugar con los batch, prueba el sitio http://www.robvanderwoude.com/
Tendrás todo sobre todo.

¡Hasta luego!
1
poulpenstring Mensajes publicados 32 Estado Miembro 33
 
Hola Mbt,

De hecho, este sitio parece muy interesante... Así que hay que añadirlo inmediatamente a los Favoritos. Gracias

Buenas noches
0
eric
 
Oufff, a fuerza de trastear, lo logré :)
propongo el siguiente código:

@Echo off SET dizaine=A%time:~0,1%B if A1B==%dizaine% goto OK if A2B==%dizaine% goto OK :ZERO SET dizaine=0 goto fin :OK SET dizaine=%time:~0,1% goto fin :FIN rename "%userprofile%\escritorio\archivo.xls" archivo_%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%_%dizaine%%Time:~-10,-9%%Time:~-8,-6%%Time:~-5,-3%.xls


¡¡¡MUCHAS gracias por tu ayuda!!!
y gracias también por el excelente enlace.
¡Buena continuación :)
1
poulpenstring Mensajes publicados 32 Estado Miembro 33
 
Bueno, tenía 2 minutos y 30 segundos por delante...

Aquí hay un ejemplo completo si consideramos que tus archivos están en C:\ y que los copias a D:\

El ejemplo es intencionadamente simplista, puedes eventualmente optimizarlo con bucles u otras etiquetas... (si te apetece)

set mon_fic=c:\bases_%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%.FIC
copy %mon_fic% d:\
set mon_fic=c:\bases_%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%.NDX
copy %mon_fic% d:\
set mon_fic=c:\histo_%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%.FIC
copy %mon_fic% d:\
set mon_fic=c:\histo_%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%.NDX
copy %mon_fic% d:\
set mon_fic=c:\reglem_%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%.FIC
copy %mon_fic% d:\
set mon_fic=c:\reglem_%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%.NDX
copy %mon_fic% d:\


(todo en un archivo.bat por supuesto)

Que tengas un buen día.
1
poulpenstring Mensajes publicados 32 Estado Miembro 33
 
Pequeña modificación (más racional y un poco más limpia)

set Wdatjour=%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%
copy c:\bases_%wdatjour%.FIC D:\
copy c:\bases_%wdatjour%.NDX D:\
copy c:\histo_%wdatjour%.FIC D:\
copy c:\histo_%wdatjour%.NDX D:\
copy c:\reglem_%wdatjour%.FIC D:\
copy c:\reglem_%wdatjour%.NDX D:\

voilà...
0
awax2050 Mensajes publicados 10 Fecha de registro   Estado Miembro Última intervención   8
 
```batch
@echo off
set amj=%date:~6,4%%date:~3,2%%date:~0,2%
set h=%time:~0,2%
set m=%time:~3,2%
set s=%time:~6,2%
if %h% lss 10 set h=0%h:~1,1%
set hms=%h%%m%%s%
rar a -m3 -ep c:\contact-%amj%-%hms%.rar c:\contact.doc
move c:\contact-%amj%-%hms%.rar E:\backup\
pause
```
1
mirza
 
date /T > date.txt

tendrás casi lo que deseas en el archivo date.txt:
jue. 24/07/2003
0
van'
 
Sí, pero el problema es que quiero usar esta fecha para nombrar un archivo, así que las "/", ¡no son lo mejor!
0
mirza > van'
 
¿Programas en qué? ¿DOS? ¿Java? ¿C/C++? ¿Otro?
0
van' > van'
 
En dos
0
van' > van'
 
¿O hay alguien que sepa cómo renombrar un directorio con la fecha de hoy?
0
gringo
 
dans ton fichier date.txt tu fais édition>chercher> et tu remplaces "/" par "_"
0
mirza
 
creo que quisiera hacerlo automáticamente desde DOS (como con el comando awk en Unix) pero en DOS, a mi parecer, está complicado...
0
van'
 
Él es Ella, pero bueno, no importa...
Bueno, si nadie tiene idea, voy a hacer otra cosa...
0
poulpenstring > van'
 
Hola,

para realizar lo que pides, debes usar las variables de entorno en tu archivo por lotes.

ejemplo toto.bat
rem*** asignar a la variable mon_fic un nombre de archivo (y su ruta) llamado de la siguiente manera jour.txt ***
set mon_fic = c:\dossier1\mesfichiers\%DATE:~0,-8%.txt

rem ** escribir coucou en el archivo **
echo coucou > %mon_fic%

para variar la cadena de caracteres, debes manipular la parte "0,-8" del comando...
0 = del primer carácter
-8 = menos los 8 últimos

podrás encontrar las diferentes formas de dar formato a la fecha escribiendo el comando en dos: set /help

Eso es todo, buena suerte...
0
ruxpin > poulpenstring
 
gracias por este puesto poulpenstring, es exactamente lo que estaba buscando, gracias de nuevo.
ruxpin
0
mirza > van'
 
lo siento ...

mirza
0
toto
 
He intentado la manipulación en Dos pero no funciona, me crea un archivo %Date%.txt
¿Alguien puede ayudarme?
0
mbt
 
ve a la página
http://www.chez.com/scudo/Faq/dos/
ahí está la respuesta... ¡es poderosa!
Crea una variable _d que contiene la fecha. Después hay que manipular un poco como se escribió más arriba para hacer lo que quieras.

Mbt
0
mbt
 
command /e:2000 /c for %%i in (1 2) do prompt set _d=$d$_ | find "$" /v >{t}.bat
for %%c in (call del) do %%c {t}.bat
0
titom
 
¡Hola a todos! Me gustaría conocer algunas aplicaciones de DOS para programar.
¿Qué se puede hacer con DOS?
¿Tienen algún programa?
¿Se puede crear un archivo exe con DOS?
¡Gracias de antemano por sus respuestas!
¡Feliz año a todos y buena continuación!
@+
tom
0
accueil@cabinet-castaldo.com
 
Hola;
¿Cómo renombrar con un .bat el archivo
e.txt a 12:59.txt
e.txt: archivo a renombrar
12:59.txt: nombre deseado, 12:59 es la hora actual
Sería fabuloso para automatizar copias de seguridad...
0
eric
 
He intentado reemplazar la variable en cuestión: si no contiene ni 1 ni 2, le coloco un 0 :)
pero ni siquiera puedo hacer una prueba sobre eso... :(
¡ayuda!

@Echo off SET dizaine=%Time:~-11,-10% @echo var original : %dizaine% IF %dizaine% == 1 goto fin IF %dizaine% == 2 goto fin SET dizaine=0 GOTO fin :fin @echo var despues de la prueba : %dizaine% pause
0
poulpenstring
 
Hola,
¿Bajo qué sistema operativo estás? He probado tu script, pero aparentemente el cero no existe en %time%, así que el primer carácter es... o las decenas o las unidades (así que no es posible probarlo). Echaré un vistazo a tu problema. En mi opinión, deberías empezar por probar la cantidad de caracteres antes de los : (dos puntos). ¿Cómo? Hay que verlo...

Que tengas un buen día
0
eric
 
Hola :)
Estoy usando Win2k.

Entonces, lo que me dices es que cuando quiero llenar la variable decena:
SET decena=%Time:~-11,-10%

contiene 1 o 2, o no está definida?
Sin embargo, cuando muestro la hora, hay un "espacio" :
_9:48
y no
9:48
en cambio, cuando intento mostrarla sola, realmente da un error, creo.

¿cómo saber qué es ese maldito carácter? ¿existe solo? debo admitir que estoy completamente perdido, incluso con toda la buena voluntad del mundo :/

No tengo idea de cómo probar el número de caracteres contenidos en una cadena :(

sin embargo, intenté algo como
if not defined set decena a 0

pero no funcionó...


gracias por la ayuda :)
0
poulpenstring
 
Aquí tienes una manera...
intenta con el siguiente batch y modifícalo según tus necesidades...
especialmente para la creación del archivo, no me ocupé de esa parte...

es un poco forzado pero funciona...

______________________________________________________

echo off
rem *** poner un cero delante de la hora****
set wcontrol=%time:~0,1%
set wcontrol=A%wcontrol%B
echo %wcontrol%

if A1B==%wcontrol% goto OK
if A2B==%wcontrol% goto OK

:CERO
echo 0%time:~1,10%.xls
goto fin

:OK
echo %time%.xls
goto fin

:FIN
echo on


______________________________________________________

Buena suerte y manténme informado
0
poulpenstring Mensajes publicados 32 Estado Miembro 33
 
Solo una info así de paso... El problema con los comandos SET - DATE y TIME es la "no portabilidad" en ciertos casos. De hecho, como menciono un poco más arriba, un batch que contenga estos comandos podría no funcionar en W95 o W98 o 2000 o XP, todo depende de la versión de DOS que esté integrada.
Por eso, lo ideal sería, en mi opinión, utilizar en su lugar pequeñas funciones (o programas exe y com) encontradas en el mundo Unix o creadas por uno mismo, que fueran utilizables en cualquier plataforma.

Si tienen ideas en este sentido... Estoy interesado. Gracias de antemano.

Un ejemplo, vardate.exe, devolvería, según sus parámetros, una variable en diferentes formas JJ_mm_aa o HH_jj_mm o incluso LUN (para lunes=) etc. etc. etc.
0
albert
 
hola,
en Win98, no funciona.
Quiero renombrar un archivo con la fecha de hoy.
Todo esto ejecutado en un .bat

¿Alguien tiene alguna idea?
0
  • 1
  • 2