iT邦幫忙

0

如何將dos command line argument pass 給 batch file

遇上兩個問題
1.argument個數不固定
2.argument 可能包含>輸出符號

舉例來說,user可能下以下指令
C:>exejava.bat aa bb cc>dd.txt
或是
C:>exejava.bat aa bb ee ff cc>dd.txt

我本來是請user 將arg用雙引號包起來,如下
C:>exejava.bat ”aa bb ee ff cc>dd.txt“

我在exejava.bat中寫
set temp=%1
set temp=%temp:~1,-1%

"%JAVA_HOME%\bin\java" %temp%

但在set temp=%temp:~1,-1%時,卻會因為>輸出符號而導致錯誤

請問有什麼好方法嗎?

1 個回答

0
蟹老闆
iT邦大師 1 級 ‧ 2018-07-23 12:47:51
set temp=%1
set temp=%temp:~1,-1%
改成
set "temp=%1"
set "temp=%temp:~1,-1%"

gmlin iT邦新手 5 級 ‧ 2018-07-23 18:06:15 檢舉

我改成如您提供的語法
@cls
set "temp=%1"
set "temp=%temp:~1,-1%"

並傳入
exejava.bat ”dir>log.txt“

執行結果如下:
https://ithelp.ithome.com.tw/upload/images/20180723/20102137S1jKmh5jON.png

在第一句set "temp=%1" 卻變成set "temp="dir 1>log.txt""
請問是什麼地方寫錯了呢?

蟹老闆 iT邦大師 1 級 ‧ 2018-07-24 01:26:02 檢舉

看到特殊符號就想到用引號,但這個例子不適合這樣包.
由於 arg 需要後處理,且這個 ">" 特殊符號需先已加入引號,所以第一個變數不該用引號包起來,否則後處理的部份會出現錯誤,請參考底下做法

@cls
@Echo Off
set temp1=%1
Echo 未處理:^"%Temp1%^"
Set temp1="%temp1:~1,-1%"
Echo 取字串:%temp1%

但這樣處理似乎沒意義?得到的還是 %1 的內容

我要發表回答

立即登入回答