Windowsコマンドインタープリターは、第3の機能パラメータbase
の値0
とC/C++の関数strtolを使用しています。これは、0から始まる任意の数値文字列が8進数として解釈されることを意味します。
@echo off
setlocal EnableExtensions
for /F "tokens=2 delims==." %%I in ('%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime /VALUE') do set "MyDate=%%I"
set "Year=%MyDate:~0,4%"
if "%MyDate:~4,1%" == "0" (set "Month=%MyDate:~5,1%") else set "Month=%MyDate:~4,2%"
if "%MyDate:~6,1%" == "0" (set "Day=%MyDate:~7,1%") else set "Day=%MyDate:~6,2%"
echo Year: %Year%
echo Month: %Month%
echo Day: %Day%
endlocal
このバッチコードを出力:進システムは、溶液は、算術式を使用して、代わりに単なる文字列の置換を使用していない0〜7
数字のみを有するもの08
と09
は、有効な8進数ではありません:
Year: 2017
Month: 8
Day: 24
使用WMICコマンドのUTF-16リトルエンディアン符号化出力は次のとおり
0のみ
LocalDateTime=20170824150309.315000+120
は、環境変数MyDate
ため、先行ゼロを削除するには、ここで何の助けをされていないだけで、文字列置換を使用してコマンドラインFOR 後の次の3つのコマンドラインではなく、算術式でさらに処理されtokens=2 delims==.
のに割り当てられています。
使用されているコマンドとその動作方法を理解するには、コマンドプロンプトウィンドウを開き、次のコマンドを実行して、コマンドごとに表示されているすべてのヘルプページをすべてよく読んでください。
echo /?
for /?
if /?
set /?
wmic /?
wmic os /?
wmic os get /?
wmic os get localdatetime /?
今は得、SET/a MM =%MyDate:〜4,2%の結果は、このエラーが発生するのは08時です。 –
しかし、結果が05の場合は数値形式が必要です。私は5が必要です。その結果が11または10または12の場合、それぞれ11または10または12が必要です。 –