コマンドラインからバッチスクリプトにいくつかの引数を渡しています。 Like:myfile.bat flower, tree, doge, cate, house
しかし、引数リストの長さは動的であり、常に5ではありません。 nからlastまでのすべての引数を取得するにはどうしたらいいですか? たとえば、nが2の場合、doge、cate、houseを取得するにはどうすればよいですか。 コメントの質問に基づいて編集します。コマンドラインで渡されたすべての引数を特定のインデックスから末尾のスクリプトに参照します。
答えて
@ECHO OFF
SETLOCAL
SET /a skipargs=2
SET "destvar=somevarname"
CALL :getargs %*
SET somevarname
SET /a skipargs=1
SET "destvar=somevarname"
CALL :getargs %*
SET somevarname
GOTO :EOF
:getargs
IF %skipargs% gtr 0 SET /a skipargs-=1&shift&GOTO getargs
SET "%destvar%="
:getargsl
IF DEFINED %destvar% (CALL SET "%destvar%=%%%destvar%%% %1"
) ELSE (
SET "%destvar%=%1"
)
SHIFT
IF "%~1" neq "" GOTO getargsl
GOTO :eof
これは、すべての引数の変数にn番目の後を割り当てる方法を示さなければなりません。
これは少し単純に、(少なくとも私にとっては)を思わ
@echo off
set/a skip=1 & rem set skip to the number of arguments to forget
for /L %%i in (1,1,%skip%) do shift & rem skip arguments
:getArg
echo %~1 & shift
if "%~1" neq "" goto :getArg
exit/B
このコードスニペットは質問を解決するかもしれませんが[説明を含む](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)あなたの投稿の質を向上させる。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。あなたのコードに説明的なコメントを詰め込まないようにしてください。これは、コードと説明の両方の可読性を低下させます! – kayess
を試してみてください。ここ
これは、 'for/F'が引用符を適切に処理しないので、これが引数を間違って解析するのではないかと思います。 *スペース*、*タブ*、 '、'、 ';'、 '='と*非区切りスペース*(コード '0xFF')... – aschipfl
Do not be恐れて...私の答えは、質問された質問と完璧に動作し、私はさらに編集前のバージョンをチェックしました。 ''花 ''、 '' doge''、ca; te、ho = use'と完全にうまくいっているはずです。私が間違っていない場合、上記のコメントには両方ともコンマが含まれているため、間違っていることを意味します。私は、私の答えが適切ではないが、質問のパラメータ内で100%働くシナリオがあることを認めます。 – Compo
あなたのアプローチは、 '' floow ''を' 'flo'と' wer "'の2つの別々の項目として解析します。しかし、 'cmd'はquotationのために' 'floow''を1つの引数として扱います。それは私が言及していたものです。もちろん、あなたのコードは質問の例で動作しますが、実際の状況では失敗する可能性があります... – aschipfl
を必要に応じて
@Echo Off
Set "n=2"
For /F "Tokens=%n%*" %%A In ("%*") Do Set "remainder=%%B"
Echo(%remainder%
Timeout -1
変更2行目に、変数nの値が(これは最初_NUMSKIP
引数が、すべてを表示する)%*
上for
ループを使用してオプションである:
@echo off
set /A "_NUMSKIP=2"
set /A "INDEX=0"
for %%A in (%*) do (
set /A "INDEX+=1"
setlocal EnableDelayedExpansion
if !INDEX! GTR %_NUMSKIP% (
endlocal
echo(%%A
) else endlocal
)
これはすべての文字列に対して安全ではないことに注意してください。たとえば、引数&"&"
は構文エラーを引き起こします。
実行へ後で転送するための単一の行の残りの引数を収集するために、これが役立つ:なる元の引数の区切り文字は、単一SPACE各により置換こと
@echo off
set /A "_NUMSKIP=2"
set /A "INDEX=0" & set "ARGS= "
for %%A in (%*) do (
set /A "INDEX+=1"
set "ARGV=%%A"
setlocal EnableDelayedExpansion
if !INDEX! GTR %_NUMSKIP% (
for /F "delims=" %%B in (^""!ARGS!!ARGV!"^") do (
endlocal
set "ARGS=%%~B "
)
) else endlocal
)
setlocal EnableDelayedExpansion
echo(!ARGS:~1,-1!
endlocal
注意。
これは引数を間違って解析し、この "花"、t、ree、 "doge"、ca; te、ho = use'を使って見ています。その出力は、それぞれのスペースが新しい行を意味する 'ree" doge "ca te ho use"です。しかし、私はすべての答えが未知の入力パラメータのセットで完全に動作するとは期待していません。 BTW、n = 2を使用して他の2つの答えも上記の入力で動作しません! – Compo
@Compoここでは構文解析が正しいので、別々の行の 'echo'出力は引数を表示するだけです。もちろん、それらは1つの変数にまとめられていても、1つの行に出力することができます - [編集の回答](http://stackoverflow.com/revisions/41018823/2)... – aschipfl
-投票... – aschipfl
- 1. npmスクリプトのコマンドライン引数をその中の特定のスクリプトに渡す
- 2. powershellスクリプトからpythonスクリプトへのコマンドライン引数の受け渡し
- 3. Pythonのこれらの引数は値渡しか参照渡しですか?
- 4. コマンドラインで引数を指定しなくても、シェルスクリプトからPythonスクリプトに引数を渡します。
- 5. SMLスクリプトにコマンドライン引数を渡す
- 6. Matlabスクリプトに引数を渡す(コマンドライン?)
- 7. プロミスチェーンの参照された関数から値を渡すか?
- 8. コマンドラインからRスクリプトへの引数の受け渡し
- 9. Pythonの実践:「参照」によって渡される引数
- 10. スクリプトからコマンドライン引数をPythonファイルに渡す方法
- 11. ネストしたスクリプトにコマンドライン引数を渡すには?
- 12. Rスクリプトのコマンドラインで引数として配列を渡すにはどうしたらいいですか?
- 13. Windowsでのアスタリスクの末尾JVMのコマンドライン引数はcygwinのbashシェルでglobbedされます
- 14. 関数の引数で渡されるオブジェクト参照
- 15. ドッカーのエントリポイントに渡された最初の引数を参照していますか?
- 16. コマンドラインから複数の引数を指定してpowershellスクリプトを呼び出す
- 17. pom.xmlのプロパティとしてMavenからのコマンドライン引数を渡す
- 18. 末尾から配列をインデックスする
- 19. javacriptの関数引数としてオブジェクト参照を渡す
- 20. は参照で引数を渡すと
- 21. 参照渡しの引数Java
- 22. 特定の数の参照配列を関数にパラメータとして渡すことはできますか?
- 23. node.jsから生成されたpythonスクリプトに複数の引数を渡す
- 24. Perlスクリプトのコマンドラインから引数として指定された名前を抽出する
- 25. 新しく生成された端末に引数を渡す
- 26. ロボットフレームワークのキーワードを参照して引数を渡す方法は?
- 27. Scala.js - SBTからコマンドライン引数を渡す
- 28. 参照を引数として渡す関数への参照を渡す方法
- 29. Excelで列の末尾を参照する方法は?
- 30. mod_rewrite:特定のファイルの末尾のスラッシュを削除します。
本当の質問は何ですか?最後の 'n'引数、fron' n'を 'last'にしたいのですか、それとも何ですか? – elzooilogico
はい、正確にnから最後まで – TBogdan