it-swarm.com.de

Festlegen einer Windows-Batch-Dateivariable auf den Wochentag

Ich habe eine Windows-Batchdatei, die täglich ausgeführt wird. Möchten Sie Daten in eine Datei protokollieren und diese drehen (d. H. Mit höchstens Daten der letzten 7 Tage).

In den Befehlen DATE und DELIMS nachgesehen - Lösung kann nicht ermittelt werden.

Gibt es eine einfache Lösung zum Erstellen eines Dateinamens, der den Wochentag enthält, d. H. 0 für Montag usw.

Oder muss ich auf ein besseres Shell-Skript zurückgreifen.

18
Ed Heal

%DATE% ist nicht dein Freund. Weil die Umgebungsvariable %DATE% (und der Befehl DATE) das aktuelle Datum unter Verwendung des Windows Short Date Format zurückgibt, das vollständig und endlos anpassbar ist. Ein Benutzer kann das System so konfigurieren, dass der 07.06.2012 zurückgegeben wird, während ein anderer Benutzer Fri060712 wählen kann. Die Verwendung von %DATE% ist ein kompletter Albtraum für einen BAT-Programmierer. 

Es gibt zwei mögliche Ansätze, um dieses Problem zu lösen:

  1. Sie werden möglicherweise versucht, das kurze Datumsformat vorübergehend zu ändern, indem Sie die Ländereinstellungen im Registrierungswert HKCU\Control Panel\International\sShortDate in Ihr erkennbares Format ändern. Greifen Sie dann auf %DATE% zu, um das Datum in dem gewünschten Format zu erhalten. und stellen Sie das Format wieder auf das ursprüngliche Benutzerformat zurück. Etwas wie das

    reg copy "HKCU\Control Panel\International" "HKCU\Control Panel\International-Temp" /f >nul
    reg add "HKCU\Control Panel\International" /v sShortDate /d "ddd" /f >nul
    set DOW=%DATE%
    reg copy "HKCU\Control Panel\International-Temp" "HKCU\Control Panel\International" /f >nul
    

    diese Methode hat jedoch zwei Probleme: 

    • es verwendet einen globalen Registrierungswert für seine lokalen speziellen Zwecke und kann daher andere Prozesse oder Benutzeraufgaben stören, die gleichzeitig das Datum im kurzen Datumsformat abfragen, einschließlich sich selbst, wenn sie gleichzeitig ausgeführt werden. 

    • und es wird der dreistellige Wochentag in der lokalen Sprache zurückgegeben, der in verschiedenen Systemen oder verschiedenen Benutzern unterschiedlich sein kann.

  2. verwenden Sie WMIC Win32_LocalTime , um das Datum auf bequeme Weise zurückzugeben, um es direkt mit einem FOR-Befehl zu analysieren.

    FOR /F "skip=1" %%A IN ('WMIC Path Win32_LocalTime Get DayOfWeek' ) DO (
      set DOW=%%A
    )
    

    dies ist die Methode, die ich empfehle.

27
PA.

einige weitere Möglichkeiten:

1 .Robocopy nicht in XP verfügbar, kann jedoch mit dem Toolkit "Win 2003 Resource Tool Kit" heruntergeladen werden.

@echo off
setlocal 
for /f "skip=8 tokens=2,3,4,5,6,7,8 delims=: " %%D in ('robocopy /l * \ \ /ns /nc /ndl /nfl /np /njh /XF * /XD *') do (
 set "dow=%%D"
 set "month=%%E"
 set "day=%%F"
 set "HH=%%G"
 set "MM=%%H"
 set "SS=%%I"
 set "year=%%J"
)

echo Day of the week: %dow%
endlocal

2 .MAKECAB - funktioniert auf jeder Windows-Maschine (erstellt jedoch eine kleine temporäre Datei) . Von carlos bereitgestellte Funktion:

@Echo Off


Call :GetDate.Init
Rem :GetDate.Init should be called one time in the code before call to :Getdate
Call :GetDate
Echo weekday:%weekday%

Goto :EOF

:GetDate.Init
Set /A "jan=1,feb=2,mar=3,apr=4,may=5,jun=6,jul=7,aug=8,sep=9,oct=10,nov=11,dec=12"
Set /A "mon=1,tue=2,wed=3,thu=4,fri=5,sat=6,Sun=7"
(
Echo .Set InfHeader=""
Echo .Set InfSectionOrder=""
Echo .Set InfFooter="%%2"
Echo .Set InfFooter1=""
Echo .Set InfFooter2=""
Echo .Set InfFooter3=""
Echo .Set InfFooter4=""
Echo .Set Cabinet="OFF"
Echo .Set Compress="OFF"
Echo .Set DoNotCopyFiles="ON"
Echo .Set RptFileName="NUL"
) >"%Temp%\~foo.ddf"
Goto :Eof

:GetDate
Set "tf=%Temp%\~%random%"
Makecab /D InfFileName="%tf%" /F "%Temp%\~foo.ddf" >NUL
For /F "usebackq tokens=1-7 delims=: " %%a In ("%tf%") Do (
Set /A "year=%%g,month=%%b,day=1%%c-100,weekday=%%a"
Set /A "hour=1%%d-100,minute=1%%e-100,second=1%%f-100")
Del "%tf%" >NUL 2>&1
Goto :Eof

3 .W32TM - Verwendet Befehlsschalter, die in Vista eingeführt wurden, funktioniert also nicht unter Windows 2003/XP:

@echo off
setlocal
call :w32dow day_ow
echo %day_ow%
pause
exit /b 0
endlocal
:w32dow [RrnVar]
setlocal

rem :: prints the day of the week
rem :: works on Vista and above


rem :: getting ansi date ( days passed from 1st jan 1601 ) , timer server hour and current hour
FOR /F "tokens=4,5 delims=:( " %%D in ('w32tm /stripchart /computer:localhost  /samples:1  /period:1 /dataonly /packetinfo^|find "Transmit Timestamp:" ') do (
 set "ANSI_DATE=%%D"
 set  "TIMESERVER_HOURS=%%E"
)

set  "LOCAL_HOURS=%TIME:~0,2%"
if "%TIMESERVER_HOURS:~0,1%0" EQU "00" set TIMESERVER_HOURS=%TIMESERVER_HOURS:~1,1%
if "%LOCAL_HOURS:~0,1%0" EQU "00" set LOCAL_HOURS=%LOCAL_HOURS:~1,1%
set /a OFFSET=TIMESERVER_HOURS-LOCAL_HOURS

rem :: day of the week will be the modulus of 7 of local ansi date +1
rem :: we need need +1 because Monday will be calculated as 0
rem ::  1st jan 1601 was Monday

rem :: if abs(offset)>12 we are in different days with the time server

IF %OFFSET%0 GTR 120 set /a DOW=(ANSI_DATE+1)%%7+1
IF %OFFSET%0 LSS -120 set /a DOW=(ANSI_DATE-1)%%7+1
IF %OFFSET%0 LEQ 120 IF %OFFSET%0 GEQ -120 set /a DOW=ANSI_DATE%%7+1


rem echo Day of the week: %DOW% 
endlocal & if "%~1" neq "" (set "%~1=%DOW%") else echo %DOW%

4 ..bat/jscript hybrid (muss als .bat gespeichert werden):

 @if (@x)==(@y) @end /***** jscript comment ******
 @echo off
 for /f  %%d in ('cscript //E:JScript //nologo "%~f0"') do echo %%d
 exit /b 0
 *****  end comment *********/
 WScript.Echo((new Date).getDay());

5 ..bat/vbscript hybrid(muss als .bat gespeichert werden)

 :sub echo(str) :end sub
echo off
'>nul 2>&1|| copy /Y %windir%\System32\doskey.exe '.exe >nul

'& echo/ 
'& for /f %%w in ('cscript /nologo /E:vbscript %~dpfn0') do echo day of the week %%w
'& echo/
'& del /q "'.exe" >nul 2>&1
'& exit /b

WScript.Echo Weekday(Date)
WScript.Quit

6 .powershell kann von Microsoft heruntergeladen werden. Standardmäßig in allen Formaten von win7 und darüber verfügbar:

@echo off
setlocal
for /f %%d in ('"powershell (Get-Date).DayOfWeek.Value__"') do set dow=%%d

echo day of the week : %dow%
endlocal

7 .WMIC wurde bereits als Antwort verwendet, möchte jedoch nur eine vollständige Referenz haben. Und mit gelöschtem <CR>:

@echo off
setlocal
for /f "delims=" %%a in ('wmic path win32_localtime get dayofweek /format:list ') do for /f "delims=" %%d in ("%%a") do set %%d

echo day of the week : %dayofweek%
endlocal

9 .Selbstkompiliertes jscript.net (muss als .bat gespeichert werden):

@if (@X)==(@Y) @end /****** silent line that start jscript comment ******

@echo off
::::::::::::::::::::::::::::::::::::
:::       compile the script    ::::
::::::::::::::::::::::::::::::::::::
setlocal
if exist "%~n0.exe" goto :skip_compilation

set "frm=%SystemRoot%\Microsoft.NET\Framework\"
:: searching the latest installed .net framework
for /f "tokens=* delims=" %%v in ('dir /b /s /a:d /o:-n "%SystemRoot%\Microsoft.NET\Framework\v*"') do (
    if exist "%%v\jsc.exe" (
        rem :: the javascript.net compiler
        set "jsc=%%~dpsnfxv\jsc.exe"
        goto :break_loop
    )
)
echo jsc.exe not found && exit /b 0
:break_loop


call %jsc% /nologo /out:"%~n0.exe" "%~dpsfnx0"
::::::::::::::::::::::::::::::::::::
:::       end of compilation    ::::
::::::::::::::::::::::::::::::::::::
:skip_compilation

"%~n0.exe"

exit /b 0


****** end of jscript comment ******/
import System;
import System.IO;

var dt=DateTime.Now;
 Console.WriteLine(dt.DayOfWeek);
13
npocmaka
@ECHO OFF
REM GET DAY OF WEEK VIA DATE TO JULIAN DAY NUMBER CONVERSION
REM ANTONIO PEREZ AYALA
REM GET MONTH, DAY, YEAR VALUES AND ELIMINATE LEFT ZEROS
FOR /F "TOKENS=1-3 DELIMS=/" %%A IN ("%DATE%") DO SET /A MM=10%%A %% 100, DD=10%%B %% 100, YY=%%C
REM CALCULATE JULIAN DAY NUMBER, THEN DAY OF WEEK
IF %MM% LSS 3 SET /A MM+=12, YY-=1
SET /A A=YY/100, B=A/4, C=2-A+B, E=36525*(YY+4716)/100, F=306*(MM+1)/10, JDN=C+DD+E+F-1524
SET /A DOW=(JDN+1)%%7

DOW ist 0 für Sonntag, 1 für Montag usw.

6
Aacini

Ich dachte, dass meine erste Antwort den richtigen Wochentag als Zahl zwischen 0 und 6 angibt. Da Sie jedoch nicht angegeben haben, warum diese Antwort nicht das gewünschte Ergebnis liefert, kann ich nur den Grund erraten .

Die folgende Batch-Datei erstellt jeden Tag eine Protokolldatei mit einer Ziffer im Namen, 0 = Sonntag, 1 = Montag usw. Das Programm setzt voraus, dass echo %date% das Datum im Format MM/DD/YYYY anzeigt. Ist dies nicht der Fall, ändern Sie einfach die Position der Variablen mm und dd im Befehl for.

@echo off
for /F "tokens=1-3 delims=/" %%a in ("%date%") do set /A mm=10%%a %% 100, dd=10%%b %% 100, yy=%%c
if %mm% lss 3 set /A mm+=12, yy-=1
set /A a=yy/100, b=a/4, c=2-a+b, e=36525*(yy+4716)/100, f=306*(mm+1)/10, dow=(c+dd+e+f-1523)%%7
echo Today log data > Day-%dow%.txt

Wenn Sie dies nicht wünschen, geben Sie bitte das Problem an, damit ich es beheben kann.

EDIT: Die unten stehende Version erhält Datumsteile unabhängig von den Gebietsschemaeinstellungen:

@echo off
for /F "skip=1 tokens=2-4 delims=(-/)" %%A in ('date ^< NUL') do (
   for /F "tokens=1-3 delims=/" %%a in ("%date%") do (
      set %%A=%%a
      set %%B=%%b
      set %%C=%%c
   )
)
set /A mm=10%mm% %% 100, dd=10%dd% %% 100
if %mm% lss 3 set /A mm+=12, yy-=1
set /A a=yy/100, b=a/4, c=2-a+b, e=36525*(yy+4716)/100, f=306*(mm+1)/10, 

dow=(c+dd+e+f-1523)%%7
echo Today log data > Day-%dow%.txt

EDIT: Die untenstehende Version füge Wochentag als 3-Buchstaben-Kurznamen ein:

@echo off
for /F "skip=1 tokens=2-4 delims=(-/)" %%A in ('date ^< NUL') do (
   for /F "tokens=1-3 delims=/" %%a in ("%date%") do (
      set %%A=%%a
      set %%B=%%b
      set %%C=%%c
   )
)
set /A mm=10%mm% %% 100, dd=10%dd% %% 100
if %mm% lss 3 set /A mm+=12, yy-=1
set /A a=yy/100, b=a/4, c=2-a+b, e=36525*(yy+4716)/100, f=306*(mm+1)/10, 

dow=(c+dd+e+f-1523)%%7 + 1
for /F "tokens=%dow%" %%a in ("Sun Mon Tue Wed Thu Fri Sat") do set dow=%%a
echo Today log data > Day-%dow%.txt

Grüße,

Antonio

3
Aacini

Erste - Kopieren Sie CON SETUPDAY.001 SET WORKDAY = ^ Z (sehr wichtig - kein cr/lf)

DATE /T >SETUPDAY.002
COPY SETUPDAY.001+SETUPDAY.002 NEWDAY.BAT >nul
CALL NEWDAY.BAT

SET WEEKDAY=%WORKDAY:~0,3%
SET MDY=%WORKDAY:~4,10%

VERWENDEN SIE% WEEKDAY% IN IHREM SCHRIFT

2
Ted Waterbury

Dies ist nicht meine Arbeit (naja, ich habe es gegenüber dem Beispiel leicht geändert), und es ist spät zum Spiel, aber das funktioniert auf Server 2003 für mich;

@echo off  
set daysofweek=Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday  
for /F "skip=2 tokens=2-4 delims=," %%A in ('WMIC Path Win32_LocalTime Get DayOfWeek /Format:csv') do set daynumber=%%A  
for /F "tokens=%daynumber% delims=," %%B in ("%daysofweek%") do set day=%%B

Zitierung: TechSupportForum

2
delliottg

Das funktioniert für mich 

FOR /F "tokens=3" %%a in ('robocopy ^|find "Started"') DO SET TODAY=%%a
2
Dan

Dies stellte sich als viel komplexer heraus, als ich zuerst vermutete, und ich denke, das hat mich fasziniert. Ich habe überall gesucht, und alle angegebenen Methoden würden unter Windows 7 nicht funktionieren.

Ich habe also eine alternative Lösung, die ein Visual Basic Script verwendet. 

Der Stapel erstellt das Skript (DayOfWeek.vbs) und führt es aus, ordnet die Skriptausgabe (Montag, Dienstag usw.) einer Variablen (dow) zu. Anschließend wird die Variable geprüft und eine weitere Variable (dpwnum) mit der Tagesnummer und anschließend der VBS zugewiesen ist gelöscht hoffe es hilft:

@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

BEARBEITEN:

Obwohl ich mich an VBS gewandt habe, kann es in reinen Batches gemacht werden. Es hat eine Weile gedauert, bis es funktioniert und eine Menge Suchlokalitäten, aber das scheint zu funktionieren:

 @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

Der einzige Nachteil für Sie bei der obigen Charge ist, dass der Wochentag 1 bis 7 und nicht 0 bis 6 beträgt

2
David Kroukamp

Ich habe diese Lösung für mich:

Erstellen Sie eine Datei mit dem Namen dayOfWeek.vbs in demselben Verzeichnis, in dem sich die cmd-Datei befindet.

dayOfWeek.vbs enthält eine einzelne Zeile:

wscript.stdout.write weekdayname(weekday(date))

oder, wenn Sie anstelle des Namens eine Tagesnummer wünschen:

wscript.stdout.write weekday(date)

Die cmd-Datei wird folgende Zeile haben:

For /F %%A In ('CScript dayOfWeek.vbs //NoLogo') Do Set dayName=%%A

Jetzt können Sie die Variable dayName like verwenden:

robocopy c:\inetpub \\DCStorage1\Share1\WebServer\InetPub_%dayName% /S /XD history logs
1
Manuel Alves

Ich bin in den USA. Ich kann diesen Code in Windows 7, Windows 2008 R2, Windows Server 2003 und Windows XP ausführen (alle Betriebssysteme sind mit Windows-Updates und Patches auf dem neuesten Stand). Alle mit kurzer Datumseinstellung ohne ddd (oder dddd) (Wochentag).

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

Wenn heute Donnerstag ist, würde "The Day Is: Do" ausgegeben werden.

Dies gibt den Tag für alle 4 Windows-Versionen zurück, die ich getestet habe. Und nur der Tag. Wenn ich die Einstellung für das kurze Datum in "ddd, M/d/jjjj" geändert habe, würde meine Ausgabe den Tag mit einem Komma anzeigen (z. B. Do), das besagt, dass dieser Code das kurze Datumsformat verwendet. Was jedoch auch passieren kann, ist, dass, wenn das kurze Datum den Wochentag nicht enthält, das lange Datumsformat aussehen kann, das auf allen 4 Computern, auf denen ich getestet habe, dddd im Format hat.

1
user2316634

Gebietsschemaabhängige Version: In einigen Umgebungen wird der Name des Tages aus dem Datum extrahiert:

set dayname=%date:~0,3%

Es wird davon ausgegangen, dass der Tagesname der erste Teil von %date% ist. Abhängig von den Maschineneinstellungen muss jedoch der Teilzeichenfolge-Teil (~0,3) geändert werden.

Eine Anweisung wie diese würde zu einer Datei mit einem dreistelligen Tagesnamen führen:

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

Gebietsschemaunabhängige Version: Wenn Sie es weniger abhängig vom Tagesformat des aktuellen Computers benötigen, können Sie auch eine kleine Anwendung schreiben, die den Wochentag druckt. Verwenden Sie dann die Ausgabe dieses Programms aus der Batchdatei. Die folgende C-Anwendung druckt beispielsweise dayN mit 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 );
}

Wenn das Obige kompiliert und als myday.exe verknüpft wurde, können Sie es aus einer Batchdatei wie folgt verwenden:

for /f %%d in ('myday.exe') do set logfile=%%d.log
echo some stuff > %logfile%
1
Mark Wilkins

Wenn Sie das Format des kurzen Datums im PC in "ddd yyyy-MM-dd" ändern können (nur der erste Parameter 'ddd' ist obligatorisch), wird der Befehl

c:\>vol | date
The current date is: Mon 2014-12-01

Dann können Sie Ihre Batch-Datei schreiben -

@echo off

vol | date | find /i "Sun" > nul 
if not errorlevel 1 goto Sun

vol | date | find /i "mon" > nul 
if not errorlevel 1 goto MON

      # write block for other week days    

goto END

:Sun
set fname="Sun"
goto BACKUP

:MON
set fname="mon"
goto BACKUP

      # write block for other week days

:BACKUP
echo %fname%

:END
0
willstay

Ich wollte das selbst machen und sah Beschwerden über leere Zeilen:

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
georges
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
Eamonn Deering

Ein weiterer Dreh zu diesem Thema. Das folgende Skript zeigt einige Tage um den aktuellen Tag mit Wochentag an.

Der Kern ist die eigenständige: dpack-Routine, die das Datum in einen Wert codiert, dessen Modulo 7 den Wochentag gemäß ISO 8601-Standards angibt (Mon == 0). Ebenfalls bereitgestellt wird: dunpk, welche die Umkehrfunktion ist:

@echo off& setlocal enabledelayedexpansion
rem 10/23/2018 daydate.bat: Most recent version at paulhoule.com/daydate
rem Example of date manipulation within a .BAT file.
rem This is accomplished by first packing the date into a single number.
rem This demo .bat displays dates surrounding the current date, prefixed
rem with the day-of-week.

set days=0Mon1Tue2Wed3Thu4Fri5Sat6Sun
call :dgetl y m d
call :dpack p %y% %m% %d%
for /l %%o in (-3,1,3) do (
  set /a od=p+%%o
  call :dunpk y m d !od!
  set /a dow=od%%7
  for %%d in (!dow!) do set day=!days:*%%d=!& set day=!day:~,3!
  echo !day! !y! !m! !d!
)
exit /b


rem gets local date returning year month day as separate variables
rem in: %1 %2 %3=var names for returned year month day
:dgetl
setlocal& set "z="
for /f "skip=1" %%a in ('wmic os get localdatetime') do set z=!z!%%a
set /a y=%z:~0,4%, m=1%z:~4,2% %%100, d=1%z:~6,2% %%100
endlocal& set /a %1=%y%, %2=%m%, %3=%d%& exit /b


rem packs date (y,m,d) into count of days since 1/1/1 (0..n)
rem in: %1=return var name, %2= y (1..n), %3=m (1..12), %4=d (1..31)
rem out: set %1= days since 1/1/1 (modulo 7 is weekday, Mon= 0)
:dpack
setlocal enabledelayedexpansion
set mtb=xxx  0 31 59 90120151181212243273304334& set /a r=%3*3
set /a t=%2-(12-%3)/10, r=365*(%2-1)+%4+!mtb:~%r%,3!+t/4-(t/100-t/400)-1
endlocal& set %1=%r%& exit /b


rem inverse of date packer
rem in: %1 %2 %3=var names for returned year month day
rem %4= packed date (large decimal number, eg 736989)
:dunpk
setlocal& set /a y=%4+366, y+=y/146097*3+(y%%146097-60)/36524
set /a y+=y/1461*3+(y%%1461-60)/365, d=y%%366+1, y/=366
set e=31 60 91 121 152 182 213 244 274 305 335
set m=1& for %%x in (%e%) do if %d% gtr %%x set /a m+=1, d=%d%-%%x
endlocal& set /a %1=%y%, %2=%m%, %3=%d%& exit /b
0
Paul Houle

Ich habe Aacini Answer Verbessert, um den ganzen Tag der Woche als Echo zu bezeichnen 

Also hier ist mein Code

@echo off
for /F "skip=1 tokens=2-4 delims=(-/)" %%A in ('date ^< NUL') do (
   for /F "tokens=1-3 delims=/" %%a in ("%date%") do (
      set %%A=%%a
      set %%B=%%b
      set %%C=%%c
   )
)
set /A mm=10%mm% %% 100, dd=10%dd% %% 100
if %mm% lss 3 set /A mm+=12, yy-=1
set /A a=yy/100, b=a/4, c=4-a+b, e=36525*(yy+4716)/100, f=306*(mm+1)/10,dow=(c+dd+e+f-1523)%%7 + 1
for /F "tokens=%dow%" %%a in ("Sunday Monday Tuesday Wednesday Thursday Friday Saturday ") do set dow=%%a
echo Today is %dow%>"Today is %dow%.txt"
echo Today is %dow%
Pause>Nul

REM Sun Mon Tue Wed Thu Fri Sat
REM Sunday Monday Tuesday Wednesday Thursday Friday Saturday  
0
Omar