バッチファイルで昨日の日付を得たい!
バッチファイルで、昨日バックアップしたファイルをダウンロードする処理を作りたい!
で、バックアップファイル名には、日付を使っているので…
昨日の日付が欲しいのだ!
バッチファイルだと現在の日付は、すんなりと取得できるのだが…
それ以外の日付を取得する処理がサポートされていない…。
で、組み込みの処理を検索すると…
メッチャ面倒!
特にうるう年の処理などが複雑にしている…。
出来れば、その辺もフォローした処理で一発で結果が欲しい…。
実は、それができるのが『PowerShell』!
…
でも『PowerShell』で処理を作りたくない!
…
何てワガママなのでしょう!(笑)
…
…
…
って訳で日付の計算だけを『PowerShell』に任せて他は、バッチ!
ってのを組んでみる事に!
どうやったらできるかな?
特にデータのやり取りをするんだ?
…
…
…
そうだ、データのやり取りにファイルを介せば何とかなるかも…
確かにDOS窓から『PowerShell』を実行できるし…。
って作ってみた。
test.bat
----------------------------------------
@echo off
call powershell -Command "(Get-Date).AddDays(-1).ToString(\"yyyyMMdd\")">$.tmp
set /p file_date=<$.tmp
del $.tmp
set file_name=sample-%file_date%.tmp
echo %file_name%
----------------------------------------
これで、任意に日付を操作できるぞ!
素敵だ!
因みに『PowerShell』に文字コードは、『UTF-8』。
なので、そのままファイル出力をすると『UTF-8』なんですね。
で、バッチファイルでは、『S-JIS』なので使えないのです…。
このコマンドだと出力されるファイルは、『UTF-8』なんですね。
call powershell -Command "(Get-Date).AddDays(-1).ToString(\"yyyyMMdd\")>$.tmp"
でも、チョット外すだけで、『S-JIS』になるのだった…。
call powershell -Command "(Get-Date).AddDays(-1).ToString(\"yyyyMMdd\")">$.tmp
これが分かるまで結構ハマった…。
他にもリダイレクションでスペースを入れないなど…。
微妙です!
でも、雲泥の差です!
トラップが一杯です!
| 固定リンク
コメント