user icon

バッチファイルでの曜日取得にVBScriptを使っていたのでPowerShellで置き換えたい

激震はしる!

『「VBScript」は非推奨に、将来のWindowsリリースで削除』 (https://forest.watch.impress.co.jp/docs/news/1537619.html)

な、なんだってー

…まぁ、正直そうでもないですが、バッチファイルでの曜日取得にVBScript使ってる先があるなぁということでPowerShellでの置き換えを考えたい、という小ネタです。

もとのVBScriptですが

WScript.Quit(WeekDay(Date))

という wday.vbs をバッチ内で実行、ERRORLEVEL環境変数で受けて使うというもの。

@echo off
cscript /b wday.vbs
echo %ERRORLEVEL%

1(日曜)~7(土曜)と整数での取得となります。0でなく1スタートなのところにVB味を感じて趣深いです。このやり方は大昔にどこかの記事を見て真似しました。

ここではechoで表示してますが、運用中のバッチファイルでは出力ファイル名の生成に使用しています(1週間でローテーションさせるため)

PowerShell経験はあまりありませんが、少し前に powershell -command "簡単な一行で書けるPowerShell" という形でバッチファイル内からPowerShellを実行したことがありました。この書き方での実行結果をバッチファイル側で使用できるとファイルを1本にできて良いなぁと思いました。 この方針で行きます。

できました。

@echo off
FOR /F "usebackq" %%i IN (`powershell -command "return  (Get-Date).DayOfWeek.value__ + 1"`) DO SET VBSWEEKDAY=%%i
echo %VBSWEEKDAY%

PowerShellでは (Get-Date).DayOfWeek.value__ で曜日の数値が取れたのですが、日曜0スタート(ですよねー)なので1足してVBScript版の仕様に合わせてるのがおちゃめポイント。
あと、バッチファイルのFORコマンドがなんだかすごい高機能でびっくりしたのと、正直「キモチワル」っと思いました。

以下、参考にしたサイト様です。ありがとうございます。

『PowerShellで当日・指定日付の曜日を取得する方法』 (https://win.just4fun.biz/?PowerShell/%E5%BD%93%E6%97%A5%E3%83%BB%E6%8C%87%E5%AE%9A%E6%97%A5%E4%BB%98%E3%81%AE%E6%9B%9C%E6%97%A5%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95#j023d1d0)
このページの「各オブジェクト・メソッド・プロパティの説明」が秀逸でとても勉強になりました。

『バッチとPowershellスクリプトで値をやりとりする方法』 (https://pcvogel.sarakura.net/2017/06/08/31727)
「参考」もとても参考になりました(特にFORコマンドについて)

Facebooktwitterlinkedintumblrmail

Tags: , ,

名前
E-mail
URL
コメント

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)