1

バッチファイルの引数を3つの文字列に抽出しようとしています。最初に変数を使用してから、それを3つに分割してみました(区切り文字はスペースです)。

コード:

@echo off
set var=\s v4.12 1,2,3,4
for /f "tokens=1,2,3 delims= " %%a in ("%var%") do (
echo a is %%a, b is %%b, c is %%c
)

結果:

a is \s, b is v4.12, c is 1,2,3,4

しかし、varを引数に実装しようとすると:

新しいコード:

@echo off
for /f "tokens=1,2,3 delims= " %%a in ("%1") do (
echo a is %%a, b is %%b, c is %%c
)

実行:

test.bat \s v4.12 1,2,3,4

結果:

a is /s, b is , c is

エコーをオンにしてみたところ、引数がループに渡されていないことがわかりました。どうすれば修正できますか?

==========編集(これはAaciniの回答に応じたものです):

私の現在のコード:

for /f "tokens=1-3" %%a in ("%*") do (
echo First is %%a, Second is %%b, Third is %%c
:loopers
for /f "tokens=* delims=," %%d in ("%%c") do (
echo %%d
shift
if not  "%%d"=="" (
goto :loopers else exit >nul
)
)
)

3番目のトークン(%% cは1,2,3,4に等しい)を取得した後、区切り文字としてコンマを使用して各数値を取得するためにループを再度作成する必要がありますが、試したところ、%cが無限に表示されます(値ですが、実際の%cテキスト)

結果は次のとおりです。

First is /s, Second is v1.4, Third is 1,2,3,4
1
%c
..infinite loop of %c..
4

1 に答える 1

2

すみません、あなたの質問が理解できないと思います。

次の行を実行します。

test.bat /s v1.1 1,3,4,5

および 3 つのトークンの別のパラメーター: "/s"、"v1.1"、"1,3,4,5" または 6 つのトークンの別のパラメーター: "/s"、"v1.1" "1"、"3 "、"4"、"5" ?

最初のケースが必要な場合は、次のコードでそれを行います。

@echo off
for /f "tokens=1-3" %%a in ("%*") do (
echo First is %%a, Second is %%b, Third is %%c
)

2 番目のケースが必要な場合、各パラメーターは %1 から %6 の置き換え可能なパラメーターで既に使用可能です。

echo First is %1, Second is %2, Third is %3, Fourth is %4, Fifth is %5, Sixth is %6

これらの解決策のどちらもあなたにとって良くない場合は、あなたが望む理由を非常に簡潔に説明してください! (混同したり、他のケースを例として挙げたりしないでください。「これが欲しい...」とだけ入力してください)

編集: 新しい情報への返信としての新しい回答

お願いします、あなたが例を見直したいと思っていることを私が理解できないことを理解してください. あなたが言いたいことを言っていないので、私は推測することしかできないので、ここでもう一度...

1- パラメータを「/s」、「v1.1」、「1,3,4,5」の 3 つのトークンに分けたい場合は、%%a、%%b、% を介してそれを行う方法を既に示しています。 %c 置換可能なパラメーター。

2- パラメータを「/s」、「v1.1」、「1」、「3」、「4」、「5」の 6 つのトークンに分けて、それらすべてに同時にアクセスしたい場合は、 %1..%6 バッチ パラメータを使用します。

3- パラメータを任意の数のトークン(この場合は 6)に分割し、 1 つずつ処理する場合は、次のコードを使用します。

:nextParam
   if "%1" equ "" goto endParams
   echo %1
   shift
   goto nextParam
:endParams

4-最初に「/s」、「v1.1」、「1,3,4,5」の 3 つのトークンでパラメーターを分離しさらに 3 番目のトークン (%%c) を 4 つの部分に分離する場合、それでは、これの目的が何であるかを理解することはできません。ただし、説明のみを目的として、これを行う方法は次のとおりです。

for /f "tokens=1-3" %%a in ("%*") do (
   echo First is %%a, Second is %%b, Third is %%c
   for %%d in (%%c) do echo %%d
)

5- 3 つのパラメーターを 3 つの変数に格納し、3 つ目の変数のコンマを削除する場合は、次のようにします。

for /f "tokens=1-3" %%a in ("%*") do (
   set First=%%a
   set Second=%%b
   set Third=%%c
)
set Third=%Third:,= %

(経由でHELP command)使用する Batch コマンドの説明を読み、理解できないものは使用しないことを強くお勧めします。理解できないコードをコピーして修正し、「なぜ私のコードが機能しないのですか?」と尋ねることに注意してください。ナンセンスです。あなたが持っているかもしれない特定の疑問について具体的な質問をすることをお勧めします.

上記の 5 つのポイントのいずれにも当てはまらない場合は、ご希望の内容を (コード例ではなく言葉で) 説明していただけない場合は、これ以上お手伝いすることはできません...

アントニオ

于 2012-12-07T03:31:52.303 に答える