こんにちは私は次のようなバッチファイルを取得しました:
if %day%==monday, tuesday, wednesday, thursday, friday (
goto yes
) else (
goto no
)
今、私は最初の行が機能しないことを知っています。
私が実際に起こりたいこと:
それはそれが何日であるかを自動的にチェックします。月曜日から金曜日の場合は「はい」に、そうでない場合は(土曜日/日曜日)「いいえ」に移動する必要があります。
これを行う方法?
こんにちは私は次のようなバッチファイルを取得しました:
if %day%==monday, tuesday, wednesday, thursday, friday (
goto yes
) else (
goto no
)
今、私は最初の行が機能しないことを知っています。
私が実際に起こりたいこと:
それはそれが何日であるかを自動的にチェックします。月曜日から金曜日の場合は「はい」に、そうでない場合は(土曜日/日曜日)「いいえ」に移動する必要があります。
これを行う方法?
Jayが述べたように、 usingdate /t
は、このコマンドが日付とともに曜日を出力するロケールでのみ機能し、他のロケール (ロシア語など) では機能しません。バッチ ファイルを VBScript と混在させてもかまわない場合は、すべてのロケールで機能するソリューションを次に示します。
トリックは、曜日を数値として出力するこの小さな VBScript スクリプトです (1 = 日曜日、2 = 月曜日、... 7 = 土曜日)。
WScript.Echo DatePart("w", Date)
バッチ ファイルからこのスクリプトを実行し、その出力を読み取り、ロジックを適用できます。
for /f %%d in ('cscript dayofweek.vbs //nologo') do (
if %%d==7 goto no :: Saturday
if %%d==1 goto no :: Sunday
)
goto yes
私はこれをオンラインで見つけました。テスト済みで、動作します。日を整数として返します。これは引き続き使用できます。
@For /F "tokens=2,3,4 delims=/ " %%A in ('Date /t') do @(
Set Month=%%A
Set Day=%%B
Set Year=%%C
)
@echo DAY = %Day%
@echo Month = %Month%
@echo Year = %Year%
IF %day% == monday GOTO YES
IF %day% == tuesday GOTO YES
IF %day% == wednesday GOTO YES
IF %day% == thursday GOTO YES
IF %day% == friday GOTO YES
GOTO NO
尋ねられたように質問に答えるバッチ fu はありませんが、これが Windows バッチ ファイルであると仮定して、タスク スケジューラを使用してスクリプトを実行することを検討してください。
以下は、ほぼロケールに依存しない方法で曜日、日、月、年を抽出するバッチ ファイルです。
唯一のロケール固有のものは曜日のスペルであり、残りはロケールに依存しません。
したがって、英語ではThu
木曜日に返されますが、オランダ語ではdo
(donderdag) になります。
:: http://stackoverflow.com/questions/203090/how-to-get-current-datetime-on-windows-command-line-in-a-suitable-format-for-usi
:: Works on any NT/2k machine independent of regional date settings
::
:: 20110103 - adapted by jeroen@pluimers.com for Dutch locale
:: 20110303 - adapted by jeroen@pluimers.com for day-of-week
:: Dutch will get jj as year from echo:^|date, so the '%%c' trick does not work as it will fill 'jj', but we want 'yy'
:: luckily, all countries seem to have year at the end: http://en.wikipedia.org/wiki/Calendar_date
:: set '%%c'=%%k
:: set 'yy'=%%k
::
:: Also, in Dutch, there is a difference between %date% and date/t: the former will not include
:: the day-of-the-week, but the latter will.
:: That means the if "%date%A" LSS "A" trick does not work with %date%, we need a loop
:: to check if the day-of-the-week needs us to take tokens 2-4 in stead of 1-3:
:: if "%date%A" LSS "A" (set toks=1-3) else (set toks=2-4)
:: for /f "tokens=1" %%t in ('date/t') do (...)
::
:: Another difference between Dutch and English is that the Dutch date/t will prepend the day of the week in a lower case 2-letter form.
:: So the LSS "A" trick needs to be replaced with an LSS "a" trick
:: if "%date%A" LSS "A" (set toks=1-3) else (set toks=2-4)
:: if "%%ta" LSS "a" (set toks=1-3) else (set toks=2-4)
::
:: In addition, date will display the current date before the input prompt using dashes
:: in Dutch, but using slashes in English, so there will be two occurances of the outer loop in Dutch
:: and one occurence in English.
:: This skips the first iteration:
:: if "%%a" GEQ "A"
::
:: echo:^|date
:: Huidige datum: ma 03-01-2011
:: Voer de nieuwe datum in: (dd-mm-jj)
:: The current date is: Mon 01/03/2011
:: Enter the new date: (mm-dd-yy)
::
:: date/t
:: ma 03-01-2011
:: Mon 01/03/2011
::
:: The assumption in this batch-file is that echo:^|date will return the date format
:: using either mm and dd or dd and mm in the first two valid tokens on the second line, and the year as the last token.
::
:: The outer loop will get the right tokens, the inner loop assigns the variables depending on the tokens.
:: That will resolve the order of the tokens.
::
@ECHO off
set v_day_of_week=
set v_day=
set v_month=
set v_year=
SETLOCAL ENABLEEXTENSIONS
for /f "tokens=1" %%t in ('date/t') do (
set v_day_of_week=%%t
if "%%ta" LSS "a" (set toks=1-3) else (set toks=2-4)
)
::DEBUG echo toks=%toks%
for /f "tokens=2-4 delims=(-)" %%a in ('echo:^|date') do (
::DEBUG echo first token=%%a
if "%%a" GEQ "A" (
for /f "tokens=%toks% delims=.-/ " %%i in ('date/t') do (
set '%%a'=%%i
set '%%b'=%%j
set 'yy'=%%k
)
)
)
if %'yy'% LSS 100 set 'yy'=20%'yy'%
set Today=%'yy'%-%'mm'%-%'dd'%
ENDLOCAL & SET day_of_week=%v_day_of_week% & SET v_year=%'yy'%& SET v_month=%'mm'%& SET v_day=%'dd'%
ECHO Today is Year: [%V_Year%] Month: [%V_Month%] Day: [%V_Day%]
set datestring=%V_Year%%V_Month%%V_Day%
echo %datestring%
echo day of week=%day_of_week%
:EOF
それを楽しんでください!
--jeroen