(もう一度) 多くの質問が同じトピック (文字列の制約、または文字列の分割) に関するものだと思います。
コード全体を提供する代わりに、テンプレートを提供して、%~dpVAR!
機能しなかった理由を説明します。
まず、なぜ%~dpVAR!
うまくいかなかったのか。
モディファイアに入る前に、パラメーターについて説明しましょう。バッチ ファイルがパラメーターを相互に解析できることはご存知かもしれません。これらのパラメーターは、0 ~ 9 の数字の前に 1 つのパーセント記号 (%) を使用して呼び出すことができます。私が知る限り (誰かがもっと解析する方法を作ったかもしれません)、解析できるパラメーターは 9 つだけです。それは間違っていると思うかもしれません (10 個のパラメーターがありますよね?)。パラメーター 1 ~ 9 はバッチ ファイル (または関数内の関数) に解析されます。%0 はバッチ ファイル (または関数名) のファイル パスです。見てみると、 %~dp0
%0 と (実際にはそうではない) 類似点があります。これについては以下で説明します。
第二に、用語%~dp0
には修飾子が含まれています。修飾子は、変数 (パラメーターとfor
ループで宣言されたパラメーターの場合のみ、%%i のような二重のパーセント記号を持つものを知っています) とパラメーターを変更するものです。修飾子d
は、パラメーターをドライブ文字のみにp
展開し、パラメーターをパスのみに展開します。これらは矛盾していると思うかもしれませんが、パラメーターを組み合わせて非常に奇抜なフォーマットを作成することができます。
ご覧のとおり、0 を変数名に置き換えようとして失敗しました。これは、そのようなものに指定されていないためです。
では、テンプレへ。
次のように、変数を制約する (そしてそれらを他の変数に入れる) ことができます。
set variable=!variable:~offset,amount!
混乱しているように見えても心配しないでください。これからコンポーネントについて説明します。
/a
まず、スイッチがないことに注意してください。これは、これが数学関数ではないためです (なぜこれを追加したのかよくわかりません)。そのため、説明する前にnumbers
、値が0123456789
.
set numbers=!numbers:~5,1!
そのコード行を使用すると、numbers
と等しくなり5
ます。これは、元の値の小さいバージョンで変数を再作成しているためです (これは説明が難しいです)。ご覧のとおり、上記のテンプレートにある5
場所があります。offset
これは、最初の 5 文字をスキップし、変数を次のamount
, または1
文字として設定しているためです (これが得られることを本当に願っています)。
したがって、基本的には、オフセットとそれに含まれる文字の量によって決定される別の (または同じ) 変数の短い値として変数を設定します。
私はおそらくこれについての言葉を理解していないので、これが役立つことを本当に願っています.
誰かがこのかわいそうな人を、これをよりよく説明するリンクにリダイレクトできますか (試してみました!)?