1

このスクリプトはどのようにエラーを返し続けますか?

@echo off
set csd=Fri 03/08/2013
set edayn=%csd:~7,1%%csd:~8,1%
set /a tsday=%edayn%
echo %edayn%
echo %tsday%
pause

時間形式: ddd mm/dd/yyyy
「csd」変数は、スクリプトを開いた日です。
変数「edayn」または日付のゼロを削除するために、「set /a」を使用して削除しましたが、次のエラーが表示されます。

Invalid number.  Numeric constants are either decimal (17),
hexadecimal (0x11), or octal (021).
08
ECHO is off.
Press any key to continue . . .

日が 0 で始まらない場合、このエラーは発生しません。
このスクリプトでエラーが見つかりません

4

2 に答える 2

2

エラーが発生する理由は、8進数(コマンド/aでフラグが使用されてsetいる場合)の前に数字0(ゼロ)が付いているためです。

有効な数値ではない理由08は、8進数システムには8つの記号(0〜7)しか含まれていないためです。これは、それ08が不可能であることを意味します。

于 2013-03-08T10:18:01.980 に答える
0

変数に値を代入するためだけに、SET に /a は必要ありません。
set tsday=%edayn%

私はあなたのcsdから月と日を取得します

%csd:~4,2%
%csd:~7,2%

EDIT
先頭のゼロを削除したい場合は、各フィールドを 2 つの部分 (10 と単位) に分割し、次に 10 フィールドを検索して、構文
を使用して '0' を空の文字列 '' に置き換えます。%variable:0=%

@echo off
set csd=Fri 13/08/2013
set day1=%csd:~4,1%
set day2=%csd:~5,1%
set mo1=%csd:~7,1%
set mo2=%csd:~8,1%
set day=%day1:0=%%day2%
set mo=%mo1:0=%%mo2%
echo %day%/%mo%
于 2013-03-08T09:47:52.277 に答える