25 votos

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 a la QuickBackup.zip archivo. Así que si me encontré el archivo de proceso por lotes de hoy, idealmente, el archivo sería QuickBackup20090514.zip.

Es allí una manera de hacer esto?

33voto

Chris Puntos 372

Bernhard respuesta sea 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.

En 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 la fecha:

c:\Scripts>echo %FECHA%

Jue 05/14/2009

11voto

Joe Puntos 60749

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

  • si tu corto formato de fecha es dd/MM/aaaa:

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

  • si tu corto formato de fecha es dd/MM/aaaa:

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

Pero no hay una 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.

7voto

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

2voto

Dmitri Farkov Puntos 3743

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

2voto

Cade Roux Puntos 53870

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 de ese sitio:

::~~Author~~.          Brett Middleton
::~~Email_Address~~. brettm@arches.uga.edu
::~~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 <brettm@arches.uga.edu>
::               :  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

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X