Cómo añadir una fecha en archivos de proceso por lotes

Tengo la siguiente línea en un archivo de proceso por lotes (que se ejecuta en un viejo Windows 2000 cuadro):

7z a QuickBackup.zip *.backup

¿Cómo puedo anexar la fecha para la QuickBackup.zip archivo. Así que si me encontré el archivo de proceso por lotes de hoy, idealmente, el archivo sería QuickBackup20090514.zip.

Hay una manera de hacer esto?

  • Desde algunas de las respuestas que el uso de la %FECHA% variable de entorno, puede que desee hacernos saber el «formato de fecha Corta» que está configurado en el sistema, en el «Opciones Regionales» del Panel de Control.
  • Un enfoque que es independiente de las Opciones de configuración Regional se encuentra en una respuesta a comando Lote fecha y la hora en el nombre de archivo – basado en el sistema de comando de wmic os get localdatetime /format:list. Muestra de la salida de wmic es: LocalDateTime=20140619215423.218000+120
InformationsquelleAutor AngryHacker | 2009-05-14

14 Kommentare

  1. 57

    Bernhard respuesta necesario ajustar algunos parámetros de trabajo para mí, porque el %FECHA% variable de entorno está en un formato diferente (como se ha comentado en otros lugares). También, hubo una tilde (~) que faltan.

    Lugar de:

    set backupFilename=%DATE:~6,4%%DATE:~3,2%%DATE:0,2%

    Tuve que usar:

    set backupFilename=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%

    para el formato de fecha:

    c:\Scripts>echo %FECHA%

    Jue 05/14/2009

    • Gracias, he ajustado mi archivo exactamente de la misma manera, el vi tu respuesta.
    • Chris, te falta la tilde en el día-de-la-mes debería ser: un conjunto de backupFilename=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
    • Para analizar este formato en el reino unido / UE / AUS fin de que he usado hoy=%DATE:~10,4%%DATE:~7,2%%DATE:~4,2%
    • Esto no funcionará en máquinas diferentes, ya que pueden tener diferentes formatos de fecha.
    • Esto funcionó perfecto para mí, gracias. Como usted, la respuesta original no funciona. He aprendido algo acerca de la manipulación de las variables de entorno en una ventana de comandos!
  2. 13

    Esto funcionará para los que no NOS formato de fecha (dd/MM/yyyy):

    set backupFilename=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
    7z a QuickBackup%backupFilename%.zip *.backup
    
  3. 12

    Si usted sabe que su configuración regional no va a cambiar, puede hacerlo de la siguiente manera:

    • si su formato de fecha es dd/MM/aaaa:

      CONJUNTO MYDATE=%DATE:~3,2%%DATE:~0,2%%DATE:~8,4%

    • si su formato de fecha es dd/MM/aaaa:

      CONJUNTO MYDATE=%DATE:~0,2%%DATE:~3,2%%DATE:~8,4%

    Pero no hay forma general de hacerlo que es independiente de la configuración regional.

    , Yo no recomendaría a depender de la configuración regional para todo lo que va a ser utilizado en un entorno de producción. En lugar usted debe considerar el uso de otro lenguaje de secuencias de comandos PowerShell, VBScript, …

    Por ejemplo, si crea un archivo VBS aaaammdd.vbs en el mismo directorio que el archivo de proceso por lotes con el siguiente contenido:

    ' yyyymmdd.vbs - outputs the current date in the format yyyymmdd
    Function Pad(Value, PadCharacter, Length)
        Pad = Right(String(Length,PadCharacter) & Value, Length)
    End Function
    
    Dim Today
    Today = Date
    WScript.Echo Pad(Year(Today), "0", 4) & Pad(Month(Today), "0", 2) & Pad(Day(Today), "0", 2)
    

    a continuación, usted podrá llamar desde su archivo de proceso por lotes así:

    FOR /F %%i IN ('cscript "%~dp0yyyymmdd.vbs" //Nologo') do SET MYDATE=%%i
    echo %MYDATE%
    

    Por supuesto que habrá finalmente, llegará a un punto donde la reescritura de su archivo de proceso por lotes en un más potente lenguaje de scripting tendrá más sentido que la mezcla con VBScript en este camino.

    • El segundo comando es muy parecido, pero yo era capaz de construir a partir de él. Gracias!!
  4. 9
    @SETLOCAL ENABLEDELAYEDEXPANSION
    
    @REM Use WMIC to retrieve date and time
    @echo off
    FOR /F "skip=1 tokens=1-6" %%A IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
        IF NOT "%%~F"=="" (
            SET /A SortDate = 10000 * %%F + 100 * %%D + %%A
            set YEAR=!SortDate:~0,4!
            set MON=!SortDate:~4,2!
            set DAY=!SortDate:~6,2!
            @REM Add 1000000 so as to force a prepended 0 if hours less than 10
            SET /A SortTime = 1000000 + 10000 * %%B + 100 * %%C + %%E
            set HOUR=!SortTime:~1,2!
            set MIN=!SortTime:~3,2!
            set SEC=!SortTime:~5,2!
        )
    )
    @echo on
    @echo DATE=%DATE%, TIME=%TIME%
    @echo HOUR=!HOUR! MIN=!MIN! SEC=!SEC!
    @echo YR=!YEAR! MON=!MON! DAY=!DAY! 
    @echo DATECODE= '!YEAR!!MON!!DAY!!HOUR!!MIN!' 
    

    De salida:

    DATE=2015-05-20, TIME= 1:30:38.59
    HOUR=01 MIN=30 SEC=38
    YR=2015 MON=05 DAY=20
    DATECODE= '201505200130'
    
    • Esto debe ser aceptado respuesta, ya que es verdaderamente independiente de la configuración regional!
  5. 5

    También puede acceder a la fecha a través de la variable %DATE%

    Al probar mi sistema %DATE% produce ddd dd/mm/aaaa

    puede utilizar subcadena operadores para producir el formato que deseo

    ie. ejecutando el siguiente LUNES 11/12/2018 con NOSOTROS configuración regional

    %DATE:~3,3% %DATE:~0,3% %DATE:~7,2%
    

    Producirá una salida:

    11 Mon 12
    

    la subcadena argumentos son

    %*variable*:~*startpos*,*numberofchars*%

  6. 3

    Todo esto es incómodo y no configuración local independiente. Hacerlo así:

    %CYGWIN_DIR%\bin\date +%%Y%%m%%d_%%H%%M% > date.txt
    for /f "delims=" %%a in ('type "date.txt" 2^>NUL') do set datetime=%%a
    echo %datetime%
    del date.txt
    

    Sí, uso Cygwin fecha y todos sus problemas se han ido!

  7. 2

    Seguro.

    FOR %%A IN (%Date:/=%) DO SET Today=%%A
    7z a QuickBackup%TODAY%.zip *.backup
    

    Que es el formato DDMMAAAA.

    Aquí YYYYDDMM:

    FOR %%A IN (%Date%) DO (
        FOR /F "tokens=1-3 delims=/-" %%B in ("%%~A") DO (
            SET Today=%%D%%B%%C
        )
    )
    7z a QuickBackup%TODAY%.zip *.backup
    
    • Si estos no funcionan, consulte la «configuración Regional y de Idioma del Panel de Control. El formato de la fecha de %Date% depende de la configuración regional.
  8. 1

    Hay una tecnología receta disponible aquí que muestra cómo darle formato a MMDDAAAA, usted debería ser capaz de adaptarlo a sus necesidades.

    echo on
    @REM Seamonkey’s quick date batch (MMDDYYYY format)
    @REM Setups %date variable
    @REM First parses month, day, and year into mm , dd, yyyy formats and then combines to be MMDDYYYY
    FOR /F "TOKENS=1* DELIMS= " %%A IN ('DATE/T') DO SET CDATE=%%B
    FOR /F "TOKENS=1,2 eol=/DELIMS=/" %%A IN ('DATE/T') DO SET mm=%%B
    FOR /F "TOKENS=1,2 DELIMS=/eol=/" %%A IN ('echo %CDATE%') DO SET dd=%%B
    FOR /F "TOKENS=2,3 DELIMS=/" %%A IN ('echo %CDATE%') DO SET yyyy=%%B
    SET date=%mm%%dd%%yyyy%
    
    echo %date%
    

    EDIT: La razón no funcionó antes fue porque de ‘smartquotes’ en el texto original. Me fijo en ellos y el archivo por lotes funcionará si cut & pega de esta página.

    • Ah, la próxima vez voy a probar correctamente antes de enlazar a otra fuente. La razón por la tecnología-receta no trabajo fue debido a los especiales caracteres de la oferta en la página web. He actualizado y funciona ahora.
  9. 1

    He utilizado las variables de entorno técnica cubierto aquí: http://cwashington.netreach.net/depo/view.asp?Index=19

    http://cwashington.netreach.net/depo/default.asp?topic=repository&move=last&ScriptType=command&SubType=Misc

    Aquí está el código del sitio:

    ::~~Author~~.          Brett Middleton
    ::~~Email_Address~~. [email protected]
    ::~~Script_Type~~.   nt command line batch
    ::~~Sub_Type~~. Misc
    ::~~Keywords~~. environment variables
    
    ::~~Comment~~.
    ::Sets or clears a group of environment variables containing components of the current date extracted from the string returned by the DATE /T command.  These variables can be used to name files, control the flow of execution, etc.
    
    ::~~Script~~.
    
    @echo off
    
    ::-----------------------------------------------------------------------------
    ::  SetEnvDate1.CMD                                                     6/30/98
    ::-----------------------------------------------------------------------------
    ::  Description  :  Sets or clears a group of environment variables containing
    ::               :  components of the current date extracted from the string
    ::               :  returned by the DATE /T command.  These variables can be
    ::               :  used to name files, control the flow of execution, etc.
    ::               :
    ::  Requires     :  Windows NT with command extensions enabled
    ::               :
    ::  Tested       :  Yes, as demonstration
    ::               :
    ::  Contact      :  Brett Middleton <[email protected]>
    ::               :  Animal and Dairy Science Department
    ::               :  University of Georgia, Athens
    ::-----------------------------------------------------------------------------
    ::  USAGE
    ::
    ::  SetEnvDate1 can be used as a model for coding date/time routines in
    ::  other scripts, or can be used by itself as a utility that is called
    ::  from other scripts.
    ::  
    ::  Run or call SetEnvDate1 without arguments to set the date variables.
    ::  Variables are set for the day abbreviation (DT_DAY), month number (DT_MM),
    ::  day number (DT_DD) and four-digit year (DT_YYYY).
    ::
    ::  When the variables are no longer needed, clean up the environment by
    ::  calling the script again with the CLEAR argument.  E.g.,
    ::
    ::       call SetEnvDate1 clear
    ::-----------------------------------------------------------------------------
    ::  NOTES
    ::
    ::  A time variable could be added by parsing the string returned by the
    ::  built-in TIME /T command.  This is left as an exercise for the reader. B-)
    ::
    ::  This script illustrates the following NT command extensions:
    ::
    ::  1.  Use of the extended IF command to do case-insensitive comparisons.
    ::
    ::  2.  Use of the extended DATE command.
    ::
    ::  3.  Use of the extended FOR command to parse a string returned by a
    ::      command or program.
    ::
    ::  4.  Use of the "()" conditional processing symbols to group commands
    ::      for conditional execution.  All commands between the parens will
    ::      be executed if the preceeding IF or FOR statement is TRUE.
    ::-----------------------------------------------------------------------------
    
    if not "%1" == "?" goto chkarg
    echo.
    echo Sets or clears date/time variables in the command environment.
    echo.
    echo    SetEnvDate1 [clear]
    echo.
    echo When called without arguments, the variables are created or updated.
    echo When called with the CLEAR argument, the variables are deleted.
    echo.
    goto endit
    
    ::-----------------------------------------------------------------------------
    ::  Check arguments and select SET or CLEAR routine.  Unrecognized arguments
    ::  are ignored and SET is assumed.
    ::-----------------------------------------------------------------------------
    
    :chkarg
    
    if /I "%1" == "CLEAR" goto clrvar
    goto setvar
    
    ::-----------------------------------------------------------------------------
    ::  Set variables for the day abbreviation (DAY), month number (MM), 
    ::  day number (DD) and 4-digit year (YYYY). 
    ::-----------------------------------------------------------------------------
    
    :setvar
    
    for /F "tokens=1-4 delims=/" %%i IN ('date /t') DO (
    set DT_DAY=%%i
    set DT_MM=%%j
    set DT_DD=%%k
    set DT_YYYY=%%l)
    
    goto endit
    
    ::-----------------------------------------------------------------------------
    ::  Clear all variables from the environment.
    ::-----------------------------------------------------------------------------
    
    :clrvar
    for %%v in (DT_DAY DT_MM DT_DD DT_YYYY) do set %%v=
    goto endit
    
    :endit
    
    • Ambos enlaces (en cwashington.netreach.net) parece estar roto ahora. Puedes arreglar los enlaces o si usted tiene algunos de los contenidos de tal manera que puede buscado?
  10. 1

    Como se ha señalado, el análisis de la fecha y la hora sólo es útil si usted sabe que el formato usado por el usuario actual (por ejemplo. MM/dd/aa o dd-MM-aaaa sólo para nombrar 2). Este podría ser determinado, pero en el momento de hacer todos los esfuerzos y de análisis, usted terminará con alguna situación donde hay un inesperado formato utilizado, y más ajustes serán necesarios.

    También se puede utilizar algún programa externo que va a devolver una fecha slug en su formato preferido, pero que tiene las desventajas de la necesidad de distribuir la utilidad del programa con la secuencia de comandos/lote.

    también hay lotes trucos usando el reloj CMOS en una bonita manera cruda, pero que está demasiado cerca de los cables pelados para la mayoría de las personas, y también no siempre el lugar preferido para recuperar la fecha/hora.

    A continuación es una solución que evita los problemas antes mencionados. Sí, introduce algunas otras cuestiones, pero para mis propósitos, he encontrado esto para ser el más fácil, más clara, más solución portátil para la creación de un datestamp en .archivos bat para los modernos sistemas Windows. Este es sólo un ejemplo, pero creo que va a ver cómo modificar para otra fecha y/o tiempo de formatos, etc.

    reg copy "HKCU\Control Panel\International" "HKCU\Control Panel\International-Temp" /f
    reg add "HKCU\Control Panel\International" /v sShortDate /d "yyMMdd" /f
    @REM the following may be needed to be sure cache is clear before using the new setting
    reg query "HKCU\Control Panel\International" /v sShortDate
    set LogDate=%date%
    reg copy "HKCU\Control Panel\International-Temp" "HKCU\Control Panel\International" /f
    
  11. 1

    Edificio en Joe idea, aquí hay una versión que va a construir su propio (.js) auxiliar y de apoyo de tiempo así:

    @echo off
    
    set _TMP=%TEMP%\_datetime.tmp
    
    echo var date = new Date(), string, tmp;> "%_TMP%"
    echo tmp = ^"000^" + date.getFullYear(); string = tmp.substr(tmp.length - 4);>> "%_TMP%"
    echo tmp = ^"0^" + (date.getMonth() + 1); string += tmp.substr(tmp.length - 2);>> "%_TMP%"
    echo tmp = ^"0^" + date.getDate(); string += tmp.substr(tmp.length - 2);>> "%_TMP%"
    echo tmp = ^"0^" + date.getHours(); string += tmp.substr(tmp.length - 2);>> "%_TMP%"
    echo tmp = ^"0^" + date.getMinutes(); string += tmp.substr(tmp.length - 2);>> "%_TMP%"
    echo tmp = ^"0^" + date.getSeconds(); string += tmp.substr(tmp.length - 2);>> "%_TMP%"
    echo WScript.Echo(string);>> "%_TMP%"
    
    for /f %%i in ('cscript //nologo /e:jscript "%_TMP%"') do set _DATETIME=%%i
    
    del "%_TMP%"
    
    echo YYYYMMDDhhmmss: %_DATETIME%
    echo YYYY: %_DATETIME:~0,4%
    echo YYYYMM: %_DATETIME:~0,6%
    echo YYYYMMDD: %_DATETIME:~0,8%
    echo hhmm: %_DATETIME:~8,4%
    echo hhmmss: %_DATETIME:~8,6%
    
  12. 1

    Sairam
    Con los ejemplos anteriores, he tratado de & salió con el script que yo quería. La posición de los parámetros mencionados en el otro ejemplo que dieron resultados diferentes. Quería crear un archivo por Lotes para tomar la copia de seguridad de datos de Oracle (exportación de datos) sobre una base diaria, preservar las diferentes DMP archivos con fecha & el tiempo como parte del nombre de archivo. Aquí está el script que funcionó bien:

    cls
    set dt=%date:~0,2%%date:~3,2%%date:~6,4%-%time:~0,2%%time:~3,2%
    set fn=backup-%dt%.DMP
    echo %fn%
    pause A
    exp user/password file=D:\DATA_DMP\%fn%
    
    • cls set dt=%date:~0,2%%date:~3,2%%date:~6,4%-%time:~0,2%%time:~3,2% conjunto fn=backup-%dt%.DMP echo %fn% pausa Una exp de usuario/contraseña de archivo=D:\DATA_DMP\%fn% Udayasankar/+91 9497648572
  13. 0

    He encontrado dos maneras en que el trabajo, independientemente de la configuración de la fecha.

    En mi pc, la fecha/t devuelve
    2009-05-27

    Usted puede tener acceso al registro y leer la configuración regional
    (HKEY_CURRENT_USER\Control Panel\Internacionales)

    O utilizar un vbscript.
    Este es el feo archivo por lotes/vbscript híbrido que he creado hace algún tiempo….

    @Echo Off
    set rnd=%Random%
    set randfilename=x%rnd%.vbs
    
    ::create temp vbscript file
    Echo Dim DayofWeek(7) >  %temp%\%randfilename%
    Echo DayofWeek(1)="Sun" >> %temp%\%randfilename%
    Echo DayofWeek(2)="Mon" >> %temp%\%randfilename%
    Echo DayofWeek(3)="Tue" >> %temp%\%randfilename%
    Echo DayofWeek(4)="Wed" >> %temp%\%randfilename%
    Echo DayofWeek(5)="Thu" >> %temp%\%randfilename%
    Echo DayofWeek(6)="Fri" >> %temp%\%randfilename%
    Echo DayofWeek(7)="Sat" >> %temp%\%randfilename%
    Echo DayofWeek(0)=DayofWeek(Weekday(now)) >> %temp%\%randfilename%
    Echo Mon=Left(MonthName(Month(now),1),3) >> %temp%\%randfilename%
    Echo MonNumeric=right ( "00" ^& Month(now) , 2) >> %temp%\%randfilename%
    Echo wscript.echo ( Year(Now) ^& " " ^& MonNumeric ^& " " ^& Mon ^& " "  _ >> %temp%\%randfilename%
    Echo ^& right("00" ^& Day(now),2) ^& " "^& dayofweek(0) ^& " "^& _ >> %temp%\%randfilename%
    Echo right("00" ^& Hour(now),2)) _ >> %temp%\%randfilename%
    Echo ^&":"^& Right("00" ^& Minute(now),2) ^&":"^& Right("00" ^& Second(Now),2)  >> %temp%\%randfilename%
    
    ::set the output into vars
    if "%1" == "" FOR /f "usebackq tokens=1,2,3,4,5,6" %%A in (`start /wait /b cscript //nologo %temp%\%randfilename%`) do Set Y2KYear=%%A& Set MonthNumeric=%%B& Set Month=%%C& Set Day=%%D& Set DayofWeek=%%E& Set Time=%%F
    set year=%y2kyear:~2,2%
    
    ::cleanup
    del %temp%\%randfilename%
    

    No es bonito, pero funciona.

    • «fecha /t» no funciona independientemente de la configuración de la fecha. Depende del «formato de fecha Corta» en la configuración regional. E. g. si se establece a «dd-MM-aaaa» y luego «fecha /t» devuelve por ejemplo, «25-09-2009».

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea