1

多くの場合、スペース、引用符、パーセント、スラッシュ、およびそれらのあらゆる種類の組み合わせを使用して、バッチ ファイルの引数を渡すことに対処してきました。通常、私は自分が望むものを達成する方法を理解することができましたが、今回は立ち往生しています。私は今、数百の組み合わせを試しましたが、頭が痛くなり始めています.

私はこの問題をかなり単純な要件に減らしました。1 つのバッチ ファイルから別のバッチ ファイルに渡すことです。これは、スペースで区切られたテキストを含む引数であり、そのうちの 1 つは引用符で囲まれたスペースです。つまり、1 つのバッチ ファイルがX別のバッチ ファイルに何らかの文字列を渡して、2 番目のバッチ ファイルが echo するようにする必要があります"A "B C" D"。どうあるXべきかわかりません。

これは、うまくいかないいくつかの試行を示す最小限のバッチ ファイルです。(この BAT ファイルは、それ自体を呼び出すことで両方の代わりになります。)

::Goal is to print:
::"A "B C" D"
::ie., pass from one BAT file to another a quote containing spaces and a quote containing a space
@echo off
if not (%1)==() goto print
:passarg
  call %0 "A "B C" D"
  call %0 "A \"B C\" D"
       %0 "A ""B C"" D"
:print
  echo %1
  pause

それらの試みはどれもうまくいきません。"\" \""""" """"""" """""\"" "\""""\" \""""^" ^""などを使ってみまし^"" "^"た。二重二重引用符を出力するか、スペースの後のすべてを失うか、または何か他のもの (それは間違っています) のいずれかです。

何か案は?ありがとう。

4

3 に答える 3

3

この回避策はどうですか:

caller.bat:

@echo off
echo "A "B C" D">dummy.txt
call callee.bat

callee.bat:

@echo off
set /p argument=<dummy.txt
echo %argument%
pause
于 2010-04-11T22:09:54.213 に答える
1

これは機能します

@echo off
if not (%1)==() goto print
:passarg
  call %0 "A "B C" D"
:print
  echo %*
于 2010-04-11T21:06:18.703 に答える
1

私はフォーラムに不慣れです。とてもクールですが、今までサインアップしたことはありません。

別のバッチからバッチを呼び出すというアイデアが気に入っています。非常に便利なので、できるだけ多くを 1 つのファイルに「パック」します。

私はこのスレッドが古いことを知っており、私が禁止されたり何かされたりしないことを願っています笑

:Example.bat
@echo off

set SOMEARG=%1
set EXAMPLEARG=%2
set EXAMPLEARG=%EXAMPLEARG:""="%
set NEWFOLDER=%3
if not (%1)==() GOTO PRINT

CALL %0 SomeWord "Hey this arg has quoted "" "" spaces!" "C:\Program Files\Folder with spaces\Subfolder"

:PRINT
ECHO.
ECHO %0
ECHO %SOMEARG%
ECHO %EXAMPLEARG%
ECHO %NEWFOLDER%
ECHO.
pause

その出力

"C:\SUT_Tools\Scripts\Testing\GLSU\Example.bat"
SomeWord
"Hey this arg has quoted " " spaces!"
"C:\Program Files\Folder with spaces\Subfolder"

Press any key to continue . . .

それが役に立てば幸い!

私の乱雑なスクリプトについて申し訳ありません、私はプログラミングにあまり深くはありません;)

于 2011-09-09T19:30:06.870 に答える