Welcome guest. Before posting on our computer help forum, you must register. Click here it's easy and free.

Author Topic: Batch file to add date to file name  (Read 13427 times)

0 Members and 1 Guest are viewing this topic.

KenK13

    Topic Starter


    Greenhorn

    • Experience: Experienced
    • OS: Windows 7
    Batch file to add date to file name
    « on: November 03, 2014, 06:37:39 AM »
    Hello Folks,

    Have a small problem that I'm hoping I could get some assistance with.  I currently have a batch file (if memory serves, it seems I originally obtained the idea from this site) that takes the date and adds it to an archive file that's created on a daily basis.  This works fine when the regional short date format in Windows is setup for M/d/yyyy.  However, we have another location which is using the short date format of dd-MMM-yy in which case the same batch file will not work.  I've tried adjusting the date variables in the existing batch file, but I'm not getting anywhere. 

    Is it possible someone might be able to tell me which settings I need to adjust to accommodate the other date format of dd-MMM-yy so the batch file could do it's thing?

    Existing file:
    Code: [Select]
    @echo off
    :: setting MM to equal the current numeric month
    set MM=%date:~4,2%

    :: putting all the possible months into a variable which will be parsed in the for loop
    set month_text="01 JAN" "02 FEB" "03 MAR" "04 APR" "05 MAY" "06 JUN" "07 JUL" "08 AUG" "09 SEP" "10 OCT" "11 NOV" "12 DEC"

    :: for loop is parsing the month_text variable and using the find command with the numeric month to set the month variable
    for %%I in (%month_text%) do echo %%I |find "%MM%" &&set MM=%%~I
    :: Need to remove the Number and space
    echo Date: %date%
    echo Today: %date:~7,2% %MM:~3% %date:~10,4%
    SET Month=%DATE:~4,2%
    if %Month%==01 set Month=JAN
    if %Month%==02 set Month=FEB
    if %Month%==03 set Month=MAR
    if %Month%==04 set Month=APR
    if %Month%==05 set Month=MAY
    if %Month%==06 set Month=JUN
    if %Month%==07 set Month=JUL
    if %Month%==08 set Month=AUG
    if %Month%==09 set Month=SEP
    if %Month%==10 set Month=OCT
    if %Month%==11 set Month=NOV
    if %Month%==12 set Month=DEC
    echo %Month%
    @For /F "tokens=2,3,4 delims=/ " %%A in ('Date /t') do @(
    Set Day=%%A
    Set Month=%%B
    Set Year=%%C
    Set All=%date:~7,2% %MM:~3% %%C
    )
     
    ECHO Compressing Daily Inventory/Receiving Files and Powering Off
    ECHO off
    7z a -t7z "Warehouse 7C - %ALL%.7z" -x!*.7z -mx9 -mmt
    shutdown /s

    In all file names, I wish for the date to appear as DD MMM YYYY [ie: 02 NOV 2014]

    Thanks so much,

    Ken

    Squashman



      Specialist
    • Thanked: 134
    • Experience: Experienced
    • OS: Other
    Re: Batch file to add date to file name
    « Reply #1 on: November 03, 2014, 06:43:25 AM »
    This should work on XP Pro and above.
    Code: [Select]
    @ECHO off
    :: GET DATE and TIME
    for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
    set "YYYY=%dt:~0,4%"
    set "MM=%dt:~4,2%"
    set "DD=%dt:~6,2%"
    set "HH=%dt:~8,2%"
    set "Min=%dt:~10,2%"
    set "Sec=%dt:~12,2%"

    KenK13

      Topic Starter


      Greenhorn

      • Experience: Experienced
      • OS: Windows 7
      Re: Batch file to add date to file name
      « Reply #2 on: November 03, 2014, 07:24:37 AM »
      Goodness, what a speedy and helpful reply.  That works marvelous.  It's also nice to have the time variables as well for future reference.

      Tested as follows (to, hopefully, display the abbreviated month in uppercase):

      Code: [Select]
      @ECHO off

      SET Month=%DATE:~3,3%
      if %Month%==01 set Month=JAN
      if %Month%==02 set Month=FEB
      if %Month%==03 set Month=MAR
      if %Month%==04 set Month=APR
      if %Month%==05 set Month=MAY
      if %Month%==06 set Month=JUN
      if %Month%==07 set Month=JUL
      if %Month%==08 set Month=AUG
      if %Month%==09 set Month=SEP
      if %Month%==10 set Month=OCT
      if %Month%==11 set Month=NOV
      if %Month%==12 set Month=DEC

      :: GET DATE and TIME
      for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
      set "YYYY=%dt:~0,4%"
      set "MM=%dt:~4,2%"
      set "DD=%dt:~6,2%"
      set "HH=%dt:~8,2%"
      set "Min=%dt:~10,2%"
      set "Sec=%dt:~12,2%"

      echo DD-MMM-YYYY: %DD% %Month% %YYYY%
      pause

      The only downside I can find is when the regional date format is set for M/d/yyyy, the month is displayed entirely in uppercase as I wish.  However, if the date format is set for dd-MMM-yy, only the first character is in uppercase.  Any way of getting the entire month to be uppercase? 

      Thank you so much.

      Ken

      foxidrive



        Specialist
      • Thanked: 268
      • Experience: Experienced
      • OS: Windows 8
      Re: Batch file to add date to file name
      « Reply #3 on: November 03, 2014, 07:29:28 AM »
      Try this:

      Code: [Select]
      @ECHO off
      :: GET DATE and TIME
      for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
      set "YYYY=%dt:~0,4%"
      set "MM=%dt:~4,2%"
      set "DD=%dt:~6,2%"
      set "HH=%dt:~8,2%"
      set "Min=%dt:~10,2%"
      set "Sec=%dt:~12,2%"

      if %MM%==01 set Month=JAN
      if %MM%==02 set Month=FEB
      if %MM%==03 set Month=MAR
      if %MM%==04 set Month=APR
      if %MM%==05 set Month=MAY
      if %MM%==06 set Month=JUN
      if %MM%==07 set Month=JUL
      if %MM%==08 set Month=AUG
      if %MM%==09 set Month=SEP
      if %MM%==10 set Month=OCT
      if %MM%==11 set Month=NOV
      if %MM%==12 set Month=DEC

      echo DD-MMM-YYYY: %DD% %Month% %YYYY%
      pause

      Squashman



        Specialist
      • Thanked: 134
      • Experience: Experienced
      • OS: Other
      Re: Batch file to add date to file name
      « Reply #4 on: November 03, 2014, 07:37:09 AM »

      The only downside I can find is when the regional date format is set for M/d/yyyy, the month is displayed entirely in uppercase as I wish.  However, if the date format is set for dd-MMM-yy, only the first character is in uppercase.  Any way of getting the entire month to be uppercase? 

      Thank you so much.

      Ken
      Was not the point of your question that you wanted one way to get the date in a consistent format so that you could use your SET commands to set the Month Abbreviation in upper case?  Why are you still using the DATE command?

      KenK13

        Topic Starter


        Greenhorn

        • Experience: Experienced
        • OS: Windows 7
        Re: Batch file to add date to file name
        « Reply #5 on: November 03, 2014, 04:25:13 PM »
        Thank you foxidrive, your solution works perfect!

        Try this:

        Code: [Select]
        @ECHO off
        :: GET DATE and TIME
        for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
        set "YYYY=%dt:~0,4%"
        set "MM=%dt:~4,2%"
        set "DD=%dt:~6,2%"
        set "HH=%dt:~8,2%"
        set "Min=%dt:~10,2%"
        set "Sec=%dt:~12,2%"

        if %MM%==01 set Month=JAN
        if %MM%==02 set Month=FEB
        if %MM%==03 set Month=MAR
        if %MM%==04 set Month=APR
        if %MM%==05 set Month=MAY
        if %MM%==06 set Month=JUN
        if %MM%==07 set Month=JUL
        if %MM%==08 set Month=AUG
        if %MM%==09 set Month=SEP
        if %MM%==10 set Month=OCT
        if %MM%==11 set Month=NOV
        if %MM%==12 set Month=DEC

        echo DD-MMM-YYYY: %DD% %Month% %YYYY%
        pause

        KenK13

          Topic Starter


          Greenhorn

          • Experience: Experienced
          • OS: Windows 7
          Re: Batch file to add date to file name
          « Reply #6 on: November 03, 2014, 04:39:36 PM »
          Was not the point of your question that you wanted one way to get the date in a consistent format so that you could use your SET commands to set the Month Abbreviation in upper case?  Why are you still using the DATE command?

          Sorry, I guess I'm not understanding you clearly.  Yes, I want to get a consistent date displayed as: DD MMM YYYY (with abbreviated month name in uppercase).  However, when I displayed the date using the code you originally provided, the result was displayed as a numeric month.

          For example, taking your code as is and displaying the output:
          Code: [Select]
          @ECHO off
          :: GET DATE and TIME
          for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
          set "YYYY=%dt:~0,4%"
          set "MM=%dt:~4,2%"
          set "DD=%dt:~6,2%"
          set "HH=%dt:~8,2%"
          set "Min=%dt:~10,2%"
          set "Sec=%dt:~12,2%"

          echo %DD% %MM% %YYYY%

          Displayed results: 03 11 2014

          That was why I went back and used a portion of the code I originally had.  This enables me to obtain the non-numeric date. [ie: NOV, not 11].

          Thank you for your help.


          Squashman



            Specialist
          • Thanked: 134
          • Experience: Experienced
          • OS: Other
          Re: Batch file to add date to file name
          « Reply #7 on: November 03, 2014, 04:57:37 PM »
          You had the code to translate the numeric month to the abbreviated month. Did not think I had to add that to the code I gave you.  Seemed fairly obvious to me.

          KenK13

            Topic Starter


            Greenhorn

            • Experience: Experienced
            • OS: Windows 7
            Re: Batch file to add date to file name
            « Reply #8 on: November 03, 2014, 05:12:00 PM »
            Not sure why you think it's necessary to belittle me here, but if that's what makes you happy so be it.


            YEAH, it was obvious to me as well.  That's why I did indeed include the month code to translate the months.  I was just curious why they had not all been uppercase.  And you made a choice to get on my case about using DATE instead of SET.  I used what worked properly for me in my particular case.  Thanks to the great help of foxidrive, I now have what works awesome.



            Squashman



              Specialist
            • Thanked: 134
            • Experience: Experienced
            • OS: Other
            Re: Batch file to add date to file name
            « Reply #9 on: November 03, 2014, 06:21:45 PM »
            I didn't get on your case about using the date command. I asked you a very black and white question. You obviously knew that the regional settings affected the output of the date command and I gave you a consistent date output that wasn't affected by the regional settings and could be used to translate into the month abbreviation using your existing set commands. You then asked again about using the date command again so I asked why you were still trying to use it.

            foxidrive



              Specialist
            • Thanked: 268
            • Experience: Experienced
            • OS: Windows 8
            Re: Batch file to add date to file name
            « Reply #10 on: November 05, 2014, 09:30:00 AM »
            Code: [Select]

            SET Month=%DATE:~3,3%
            if %Month%==01 set Month=JAN
            if %Month%==02 set Month=FEB
            if %Month%==03 set Month=MAR
            if %Month%==04 set Month=APR
            if %Month%==05 set Month=MAY
            if %Month%==06 set Month=JUN
            if %Month%==07 set Month=JUL
            if %Month%==08 set Month=AUG
            if %Month%==09 set Month=SEP
            if %Month%==10 set Month=OCT
            if %Month%==11 set Month=NOV
            if %Month%==12 set Month=DEC


            The code you showed is both peculiar and broken.  Your code essentially uses a numeric month to give you a three letter month, and
            with Squashman's code it works perfectly.

            The first line above sets the month variable to a THREE character string and then you proceed to compare it with a TWO character string - so it will do nothing and the original month variable will remain totally unchanged.

            That is why it failed.


            I should add that batch is peculiar too and if the string (of two numerals) happened to have a leading or trailing space then it could match in the compares. 
            « Last Edit: November 05, 2014, 09:50:23 AM by foxidrive »