2009-07-22 4 views
2

%*に関するバッチファイルのパラメータについて多くの質問がありましたが、答えは見つかりませんでした。バッチファイルに相当するunixパラメータの展開と引用符付き

UNIXの "$ @"と同じ動作を実行できる同等の構文がバッチファイルにありますか?

いくつかのコンテキスト:

@echo off 
set MYPATH=%~dp0 
set PYTHON=%MYPATH%..\python\python 
set BASENAME=%~n0 
set XTPY=%MYPATH%..\SGTools\bin\%BASENAME%.py 
"%PYTHON%" "%XTPY%" %* 

これは、Pythonスクリプトを呼び出すためにプロキシを使用しているの.batファイルです。だから、私はすべてのパラメータ(スクリプト名を除く)をpythonスクリプトに渡しています。これは、パラメータが引用符で囲まれたり、スペースが含まれるまでうまく動作します。

シェルスクリプトでは、 "$ @"を使用して各パラメータを取得し、引用符で囲むことができます。このプロセスを再現するためにできることはありますか?

例コール:

xt -T sg -t "path with possible spaces" -sum "name with spaces" -p <tool_name> -o lin32 lin64 win32 <lots of other options with possibilities of spaces> 

実際の実行可能ファイルが別のフォルダにPythonコードであるため、コマンド/ファイルXTは単に上記のコードを含んでいます。つまり、あなたのパスに1つのディレクトリ(xbinディレクトリ)を追加するだけの自己完結型のパッケージを作成することです。

+0

設定している環境変数や '%*'の内容を参照していますか?いくつか例を挙げることができますか? –

+0

@Keith_CE:PowerShellを使用して、このナンセンスを取り除くことができます。 –

+0

@Sinan%*の内容を参照しています。上記の例と説明は意味を成すのに役立ちますか? –

答えて

3

これも私をナットにしていました。私はきれいな解決策が何であるかわからないんだけど、ここで私が問題を回避働いていた方法です:

setlocal EnableDelayedExpansion  
for %%i in (%*) do set _args= !_args! "%%~i"  
echo %_args% 

%_args%は今、個々のパラメータの引用されたリストが含まれます。あなたはバッチファイルを呼び出した場合たとえば、次のように:

MYBATFILE "test'1'file" "test'2'file" "test 3 file"` 

エコー%_args%

オリジナルの引用された入力を生成します。

私は無愛想なファイルやディレクトリの名前を取り、重い物を持ち上げるを行うcygwinのbashシェルスクリプトに渡すCMDファイルのためにこれを必要に応じて、私は移行で失われた埋め込まれた単一引用符やスペースを持っている余裕がなかったです。

〜私で%%〜私たちは引用符を適用する前に、引用符を除去する必要がある私%。スペースを含むパラメータが渡されると(例えば、上記の "test 3 file")、CMDシェルは既にそれに引用符を適用します。ここの波は、スペースを含むパラメータを二重引用符で囲まないようにします。

希望すると便利です。

関連する問題