コマンドプロクプトのif文について
コマンドプロクプトのif文について
WindowsXP Pro sp2 環境です
バッチファイルで set, date , time を用いて、ファイル名にまたはその一部に日付と時間をつけようとしています。例えば"yyyymmddhhmmss.txt" この時、10時前だと、"20050305 51020.txt" とtimeの先頭1桁が空白になります。これを "0" にする方法をお教えください
今までに試したこと
set ymd=%date:~-10,4%%date:~-5,2%%date:~-2,2%
:/
set "c1=1"
set "c9=9"
:/
set "time= 0:10:20.30"
:/
set "ch=%time:~0,1%"
:/
if ((%ch% GEQ %c1%) AND (%ch% LEQ %c9%)) (
set hms=%time:~0,2%%time:~3,2%%time:~6,2%
) ELSE (
set hms=0%time:~1,1%%time:~3,2%%time:~6,2%
)
echo %ymd%%hms% ----- (1)
:/
set time=10:10:20.30
set "ch=%time:~0,1%"
:/
if ((%ch% GEQ %c1%) AND (%ch% LEQ %c9%)) (
set hms=%time:~0,2%%time:~3,2%%time:~6,2%
) ELSE (
set hms=0%time:~1,1%%time:~3,2%%time:~6,2%
)
echo %ymd%%hms% ----- (2)
:/
pause
この結果、(1)(2)共、"20050305001020" となってしまっています
宜しくお願い致します
投稿日時 - 2005-03-05 12:15:24
このQ&Aは役に立ちましたか?
0人が「このQ&Aが役に立った」と投票しています
回答(1)
勘違いな答えかもしれませんが、
コントロールパネルの地域と言語のオプションで
時刻の書式を
hh:mm:dd
にした場合、時刻の書式に(一桁の数字の場合)0が付与されます。
そうすると、簡単かと思います
投稿日時 - 2005-03-06 04:47:04
webをいくつか調べて、不完全ですがある程度解決しました。
(1)if分で環境変数の値を判定する時、スペースは null になってしまうようで、たとえば、if %a% EQU %b% と判定を使う場合、 if /%a% EQU /%b% のように、余分にコンスタントを付加して null にならないようにすることが1つのテクニックのようです。
(2)if分の中で、括弧 "(" や ")" を使って複合分を扱う時、遅延環境変数が影響し、環境変数が事前に評価されてしまうそうで、複合分をやめ、goto分で対応したほうがよさそうでした。
以上で、とりあえず動きました。
time の前ゼロを "0" 表示することで解決しましたが、別の pc への移植性からスペースを "0" に置き換えたいと思いました。
投稿日時 - 2005-03-07 17:57:57
回答ありがとうございます。
「コントロールパネルの地域と言語のオプション」で時間表示のゼロサプレスの解除ができるんですね。これもひとつの解決ですね。
今回は、バッチファイルでの、if分が、求める結果にならない事が回答頂ければと思っております。
投稿日時 - 2005-03-06 21:35:22