How to append a date in batch files

后端 未结 14 2039
夕颜
夕颜 2020-12-01 03:25

I have the following line in a batch file (that runs on an old Windows 2000 box):

7z a QuickBackup.zip *.backup

How do I append the date to

相关标签:
14条回答
  • 2020-12-01 03:59

    This is all awkward and not local settings independent. Do it like this:

    %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
    

    Yes, use Cygwin date and all your problems are gone!

    0 讨论(0)
  • 2020-12-01 04:04

    This will work for the non-US date format (dd/MM/yyyy):

    set backupFilename=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
    7z a QuickBackup%backupFilename%.zip *.backup
    
    0 讨论(0)
  • 2020-12-01 04:04

    Sure.

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

    That is DDMMYYYY format.

    Here's 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
    
    0 讨论(0)
  • 2020-12-01 04:09

    I've used the environment variables technique covered here: http://cwashington.netreach.net/depo/view.asp?Index=19

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

    Here's the code from that site:

    ::~~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
    
    0 讨论(0)
  • 2020-12-01 04:11

    If you have WSL enabled (Windows 10 only) you can do it with bash in a locale neutral way.

    set dateFile=%TEMP%\currentDate.txt
    bash -c "date +%Y%m%d" > %dateFile%
    set /p today=<%dateFile%
    

    Feel free to replace the file redirection with a "for" loop abomination suggested in other answers here and over at Windows batch assign output of a program to a variable

    0 讨论(0)
  • 2020-12-01 04:13

    There is a tech recipe available here that shows how to format it to MMDDYYYY, you should be able to adapt it for your needs.

    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: The reason did not work before was because of 'smartquotes' in the original text. I fixed them and the batch file will work if cut & pasted from this page.

    0 讨论(0)
提交回复
热议问题