Extraer la fecha con Ms-DOS
Resuelto
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??????
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
-
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. -
```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
``` -
Pour mostrar la hora en un nombre de archivo y evitar el problema de cero en el caso de que la hora esté entre (00h = 0h a 09 = 9h), solo hay que reformatear la variable utilizada para mostrar la hora, por ejemplo, si la variable usada es vtime, se utiliza otra variable ptime=%vtime: =0% esta orden reemplaza el cero en vtime por 0 (si vtime= 92531 entonces ptime=092531)
-
for /f "tokens=1-3 delims:;" %%i in ('time /t') do echo Testing: %date:/=_ %%%ih%%j >> _test-date-time.txt
=) -
¡Guau, 6 años después :) ¡Yo digo bravo, señor! ... ¡No nos rejuvenece todo esto! Pero es un placer ver que las horas pasadas elaborando pequeños trozos de código todavía pueden servir 6 años después. Admito que de vez en cuando hago pequeños copiar/pegar de los ejemplos explicados en este hilo. ¡Felices fiestas de fin de año para ti!
Poulpenstring -
6 años después, agradezco a Eric y Poulpenstring por su ayuda
Gracias a ellos, he logrado hacer mi batch fácilmente y funciona perfectamente.
Muchas gracias -
Hola Van,
Prueba el comando string.com
y ejecuta un script .BAT como sigue
Echo OFF
STRINGS DÍA = DAY
RENOMBRAR file.txt %DÍA%.TXT
Buena suerte Van
SEMTECH -
día de la semana (lunes.....viernes)
día(dd)
mes(mm)
año(aaaa) -
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.-
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à...
-
-
Al mirar este tema, me di cuenta de que la respuesta n°15 de este tema corresponde a tus expectativas...
en el ejemplo:
set mi_archivo=c:\ZZZ-%Fecha:~-4%%Fecha:~-7,-5%%Fecha:~-10,-8%.XXX
echo %mi_archivo%
solo necesitas reemplazar c:\ por la ruta correcta - ZZZ por el nombre de tu archivo y XXX por la extensión de tu archivo, luego hacer tu copia en lugar del comando echo de este ejemplo...
quedaría algo así:
set mi_archivo=c:\bases_-%Fecha:~-4%%Fecha:~-7,-5%%Fecha:~-10,-8%.FIC
copy %mi_archivo% DESTINO (ver la sintaxis exacta de copy)
Todo en un .bat practicando lo mismo para...
bases_20080405.NDX
histo_20080405.FIC
histo_20080405.NDX
reglem_20080405.FIC
reglem_20080405.NDX
A probar.......
Buen día -
Hola,
Sí, es ciertamente posible. Estando en la oficina, no tengo mucho tiempo para hacer una prueba, pero mientras tanto, ¿por qué no pruebas un buen software de sincronización como SyncBackSE que hará este trabajo maravillosamente?
Perdona por esta respuesta incompleta, pero mientras tanto, nunca se sabe si esto te puede ayudar.
¡Que tengas un buen día! -
Trabajo en un software que crea cada día 6 archivos que corresponden al historial del día.
Estos archivos son:
bases_20080405.FIC
bases_20080405.NDX
histo_20080405.FIC
histo_20080405.NDX
reglem_20080405.FIC
reglem_20080405.NDX
Mi misión es enviar todos los días a las 23h, únicamente los 6 archivos que contengan la fecha del sistema, hacia una computadora remota (así que la transferencia es por IP) y pegarlos en un directorio específico.
¿Está clara mi pregunta? ¿Es irrealizable? ¡Gracias a quien me saque de este mal paso! -
Notas:
Atención a las variables declaradas en un bucle for o en una llamada realizada dentro del bucle for:
-- no es posible actualizar o recuperar.
-- utilizar variables declaradas antes del bucle.
-- probar bien antes de poner en producción.
Por mi parte, realizo mis operaciones completamente en las llamadas;
el bucle for solo me sirve para leer los valores uno tras otro. -
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. -
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 -
Tengo una base de datos en SQL Server y quiero agregar datos en ciertas tablas, pero estoy en Access XP. De hecho, estoy enlazando tablas a la base de SQL Server a través de ODBC. ¿Qué seguridad debo establecer en las tablas para que esto sea posible?
-
Para recuperar la fecha (o la hora), sin usar un archivo tmp:
for /F "tokens=1* delims=@" ('date /T') do set date=%%a
delims=@ permite recuperar todo en una sola variable
de lo contrario, se pueden usar varios delimitadores y recuperar los campos individualmente.
para tener explicaciones: help for
sólo funciona bajo W/NT y superior (no bajo W98) -
hola,
en Win98, no funciona.
Quiero renombrar un archivo con la fecha de hoy.
Todo esto ejecutado en un .bat
¿Alguien tiene alguna idea? -
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 :) -
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.
- 1
- 2
Siguiente