1

上記の(あらゆる物質の)ガイドをかなりの量検索して、役に立たなかった。誰かが私を紹介してもらえますか?

ただし、現在形では、次のコード例を理解しようとしています。このコード例は、月の2桁の表現を返します。これは、vで設定された3文字の月の名前に対応します。

    SET v=May

    SET map=Jan-01;Feb-02;Mar-03;Apr-04;May-05;Jun-06;Jul-07;Aug-08;Sep-09;Oct-10;Nov-11;Dec-12
    CALL SET v=%%map:*%v%-=%%
    SET v=%v:;=&rem.%

    ECHO.%v%
4

3 に答える 3

2

SET v=May変数を設定します

SET map=Jan-01;Feb-02;Mar-03;Apr-04;May-05;Jun-06;Jul-07;Aug-08;Sep-09;Oct-10;Nov-11;Dec-12置換文字列を設定します

CALL SET v=%%map:*%v%-=%%-%vをに設定しmapますが、%v%までのすべてを何も:置き換えません(*これまでのすべてを何も含めずにMay-置き換えます(=の後に置換コードはありません)-v現在は05;Jun-06;Jul-07;Aug-08;Sep-09;Oct-10;Nov-11;Dec-12

SET v=%v:;=&rem.%replace ;withは、vをに&rem設定する行を設定し、コマンドの他のすべての部分をコメントアウトします。実行されるコマンドは05& remSET v=05 & rem.Jun-06 & rem.Jul-07 & rem.Aug-08 & rem.Sep-09 & rem.Oct-10 & rem.Nov-11 & rem.Dec-12

ECHO.%v%答えを与える

このサイトは多くの情報を提供しますが、バッチファイルを実行し、echo%v%を配置することも役立ちます

于 2012-06-26T21:12:04.467 に答える
1

すみません。私はこのタイプのコードが好きではありません。私の個人的な意見では、これらの値を次のように配列として管理することは非常に明白です。

rem Prepare the array of two-digits values for each 3-letters month names:
for %%a in ("Jan=01" "Feb=02" "Mar=03" "Apr=04" "May=05" "Jun=06" "Jul=07" "Aug=08" "Sep=09" "Oct=10" "Nov=11" "Dec=12") do (
   set month%%~a
)
rem Previous code is equivalent to these 12 lines:
rem set monthJan=01
rem set monthFeb=02
. . . .
rem set monthDec=12

rem This way, the result is immediately accessible:
SET v=May
CALL SET v=%%month%v%%%

rem Or in the clearer way using Delayed Expansion:
SET v=!month%v%!

monthXXXは、12の異なる3文字の月の名前の値の配列です。

SET v=Mayインデックスの値を要素配列に設定します。

SET v=!month%v%!最初にSET v=!monthMay!(通常の拡張)に拡張され、次にSET v=05(遅延拡張)に拡張されます。

私はこれらの投稿のすべての詳細でこの表記を好まなければならない理由を説明しました:

cmd.exe(バッチ)スクリプトの配列、リンクリスト、およびその他のデータ構造

DIR出力をBATアレイに?

この回答がトピックから外れていると誰かが思った場合は、お詫び申し上げます...

アントニオ

于 2012-06-26T23:05:20.973 に答える
0

逆の方法が必要で、入力した月番号が間違っている場合にエラーが必要な場合は、script.cmdという名前のファイルにこれを入れてください。

@echo off
set mNum=%1

set mMap=01-Jan;02-Feb;03-Mar;04-Apr;05-May;06-Jun;07-Jul;08-Aug;09-Sep;10-Oct;11-Nov;12-Dec
call set mName=%%mMap:*%mNum%-=%%
set mName=%mName:;=&rem.%
if "%mName%" == "01-Jan" (
  echo Wrong month number "%mNum%"!
  goto :EOF
  )

echo Month %mNum% is "%mName%".

そして、パラメータを使用してスクリプトを開始します。

> script 02
Month 02 is "Feb".

> script 13
Wrong month number "13"!

> script foo
Wrong month number "foo"!

ただし、空の値は対象外です。

> script
Month  is "Jan".
于 2013-07-25T09:35:16.850 に答える