2010-04-11 65 views
1

在很多場合,我已經處理了使用空格,引號,百分號和斜槓以及它們的各種組合來傳遞批處理文件參數的問題。通常我設法弄清楚如何完成我想要的,但是這次我被卡住了。我已經嘗試了幾百種組合,現在我的腦袋開始受傷。傳遞批處理文件包含含有空格的引用的參數

我已經將問題簡化爲相當簡單的要求:從一個批處理文件傳遞到另一個批處理文件,該文件包含一些空格分隔的文本,其中一個文本是引用空間。也就是說,一個批處理文件應該將一些字符串X傳遞給另一個文件,以便第二個文件回顯"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 

這些嘗試都不起作用。我試過使用"\" \"",""" ""","""" """","\"" "\"",""\" \""","^" ^"",^"" "^"等等。要麼他們打印雙雙引號,在空間後面丟掉所有東西,或者其他東西(這是錯誤的)。

任何想法?謝謝。

回答

1

這工作

@echo off 
if not (%1)==() goto print 
:passarg 
    call %0 "A "B C" D" 
:print 
    echo %* 
+0

嗯,我似乎已經減少了一點點。我會在一秒之內更新...完成。 – Synetech 2010-04-11 21:08:51

+0

林不知道你的目標是什麼,在更新的代碼^「^」仍然有效。你試圖通過什麼樣的短語,以及實際發生了什麼? – 2010-04-11 21:18:25

+0

我正在嘗試打印「A」B C「D」'。 ''「'周圍還有其他東西(包括空格)。使用'^「^」'(例如'「A ^」B C ^「D」')不起作用。 – Synetech 2010-04-11 21:20:07

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 
+0

好吧,這個工作,我會考慮使用它,而不是我目前正在做的(直接se使用註冊表項而不是使用特定的BAT文件來做到這一點),但我更喜歡避免使用臨時文件。 – Synetech 2010-04-12 03:20:38

+0

Doh!我只記得爲什麼在發佈它之前我已經解除了這個方法:除了命令行參數之外,它需要修改另一個批處理文件以接受其輸入的環境變量。這對於不能修改被調用者的情況並不適用,並且對於可以的情況,它需要更多的工作來支持兩種輸入方法(BAT文件是CISC-uh,CISL語言(如ASM):有限的命令,因此很笨拙)。 – Synetech 2010-04-12 16:15:35

+0

呵呵,誰清理了環境變量?來電者還是被叫者?它不像一個在超出範圍時可以被破壞的類;變量會一直存在,直到控制檯關閉。 :( – Synetech 2010-04-12 16:23:36

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 . . . 

希望它能幫助!

對不起,我的雜亂的腳本,我沒有深入編程;)

+0

嗨,謝謝你的建議,不,回答以前的問題沒有錯,你的方法與JRL使用環境變量的方法類似,但它有同樣的問題:變量在哪裏清理? – Synetech 2011-09-10 16:52:06

+0

任何時候都可能添加一個'set EXAMPLEARG ='?或者你以後需要這個變量?我已經讀了所有的答案兩次。對不起,我想我沒有不明白... =( – 2011-09-12 13:05:36

相關問題