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

后端 未结 17 1944
南方客
南方客 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:35

    This turned out way more complex then I first suspected, and I guess that's what intrigued me, I searched every where and all the methods given wouldnt work on Windows 7.

    So I have an alternate solution which uses a Visual Basic Script.

    The batch creates and executes the script(DayOfWeek.vbs), assigns the scripts output (Monday, Tuesday etc) to a variable (dow), the variable is then checked and another variable (dpwnum) assigned with the days number, afterwards the VBS is deleted hope it helps:

    @echo off
    
    REM Create VBS that will get day of week in same directory as batch
    echo wscript.echo WeekdayName(Weekday(Date))>>DayOfWeek.vbs
    
    REM Cycle through output to get day of week i.e monday,tuesday etc
    for /f "delims=" %%a in ('cscript /nologo DayOfWeek.vbs') do @set dow=%%a
    
    REM delete vbs
    del DayOfWeek.vbs
    
    REM Used for testing outputs days name
    echo %dow%
    
    REM Case of the days name is important must have a capital letter at start
    REM Check days name and assign value depending
    IF %dow%==Monday set downum=0
    IF %dow%==Tuesday set downum=1
    IF %dow%==Wednesday set downum=2
    IF %dow%==Thursday set downum=3
    IF %dow%==Friday set downum=4
    IF %dow%==Saturday set downum=5
    IF %dow%==Sunday set downum=6
    
    REM print the days number 0-mon,1-tue ... 6-sun
    echo %downum%
    
    REM set a file name using day of week number
    set myfile=%downum%.bak
    
    echo %myfile%
    
    pause
    exit
    

    EDIT:

    Though I turned to VBS, It can be done in pure batch, took me a while to get it working and a lot of searching lol, but this seems to work:

     @echo off
    SETLOCAL enabledelayedexpansion
    SET /a count=0
    FOR /F "skip=1" %%D IN ('wmic path win32_localtime get dayofweek') DO (
        if "!count!" GTR "0" GOTO next
        set dow=%%D
        SET /a count+=1
    )
    :next
    echo %dow%
    pause
    

    The only caveat for you on the above batch is that its day of weeks are from 1-7 and not 0-6

提交回复
热议问题