Setting a windows batch file variable to the day of the week

后端 未结 17 1893
南方客
南方客 2020-11-27 20:14

I have a windows batch file that runs daily. Wish to log data into a file and want to rotate it (i.e. having at most the last 7 days worth of data).

Looked into the

相关标签:
17条回答
  • 2020-11-27 20:59
    Rem Remove the end comma and add /A to set for this line worked for me.
    set /A a=yy/100, b=a/4, c=2-a+b, e=36525*(yy+4716)/100, f=306*(mm+1)/10 
    
    0 讨论(0)
  • 2020-11-27 21:00

    Was looking to do this myself and saw complaints about blank lines:

    rem Make the win32_localtime output all one line, though some versions may contain blank lines as well.
    rem So ignore blank lines and just pick up the number after the equal sign.
    for /f "delims== tokens=2" %%a in ('wmic path win32_localtime get dayofweek /format:list') do (
        rem Increment the DOW as it is documented to be a zero-based index starting with Sunday.
        set /a DayOfWeekIndex=%%a+1
    )
    rem Also get name day of week. The DOW coming in is now a one-based index.
    rem This is used to reference the "array" of week day names.
    set DayOfWeekNames=Sun Mon Tue Wed Thu Fri Sat
    for /f "tokens=%DayOfWeekIndex%" %%b in ("%DayOfWeekNames%") do (
        set DayOfWeekName=%%b
    )
    
    0 讨论(0)
  • 2020-11-27 21:00

    A version using MSHTA and javascript. Change %jsfunc% to whateve jscript function you want to call

    @echo off
    ::Invoke a javascript function using mhta
    
    set jsfunc=new Date().getDay()
    set dialog="about:<script>resizeTo(0,0);new ActiveXObject('Scripting.FileSystemObject').
    set dialog=%dialog%GetStandardStream(1).WriteLine(%jsfunc%);close();</script>"
    
    for /f "tokens=* delims=" %%p in ('mshta.exe %dialog%') do set ndow=%%p
    
    ::get dow string from array of strings  
    for /f "tokens=%ndow%"  %%d in ("Mon Tue Wed Thu Fri Sat Sun") do set dow=%%d 
    
    echo dow is : %ndow%  %dow%
    pause
    
    0 讨论(0)
  • 2020-11-27 21:01

    I am in the US. I can run this code in Windows 7, Windows 2008 R2, Windows Server 2003, Windows XP (All OS's are current with Windows Updates and patches). All with short date setting without ffffd (or ffffdd) (day of week).

    @echo off
    for /f %%a in ('date /t') do set DAY=%%a
    echo.
    echo The Day Is: %DAY%
    echo.
    

    If today is Thursday, it would output "The Day Is: Thu".

    This returns the day on all 4 Windows versions I have tested on. And only the day. When I changed my short date setup to be "ffffd, M/d/yyyy", my output would show the day with a comma (e.g. Thu,) which tells me this code does use the short date format. But what also may be happening is that if the short date does not contain the day of week, it may look to the long date format which on all 4 machines I tested on, have ffffdd in the format.

    0 讨论(0)
  • 2020-11-27 21:01

    Locale-dependent version: In some environments, the following will extract the day name from the date:

    set dayname=%date:~0,3%
    

    It assumes that the day name is the first part of %date%. Depending on the machine settings, though, the substring part (~0,3) would need to change.

    A statement such as this would dump to a file with a three character day name:

    set logfile=%date:~0,3%.log
    echo some stuff > %logfile%
    

    Locale-independent version: If you need it less dependent on the current machine's day format, another way of doing it would be to write a tiny application that prints the day of the week. Then use the output of that program from the batch file. For example, the following C application prints dayN where N=0..6.

    #include <stdio.h>
    #include <time.h>
    
    int main( int argc, char* argv[] )
    {
       time_t curtime;
       struct tm * tmval;
    
       time( &curtime );
       tmval = localtime( &curtime );
       // print dayN.  Or use a switch statement and print
       // the actual day name if you want
       printf( "day%d", tmval->tm_wday );
    }
    

    If the above were compiled and linked as myday.exe, then you could use it from a batch file like this:

    for /f %%d in ('myday.exe') do set logfile=%%d.log
    echo some stuff > %logfile%
    
    0 讨论(0)
提交回复
热议问题