windows script教學 - 如何將命令行參數傳遞給批處理文件?




7 Answers

另一個有用的提示是使用%*表示“全部”。 例如,

echo off
set arg1=%1
set arg2=%2
shift
shift
fake-command /u %arg1% /p %arg2% %*

當你運行:

test-command admin password foo bar

上述批處理文件將運行:

fake-command /u admin /p password foo bar

我可能會有語法錯誤,但這是一般的想法。

file指令 batch

我需要在運行時將id和密碼傳遞給cmd(或bat)文件,而不是將它們硬編碼到文件中。

以下是命令行的外觀:

test.cmd admin [email protected] > test-log.txt



如果你想聰明地處理缺少的參數,你可以做如下的事情:

IF %1.==. GOTO No1
IF %2.==. GOTO No2
... do stuff...
GOTO End1

:No1
  ECHO No param 1
GOTO End1
:No2
  ECHO No param 2
GOTO End1

:End1



是的,只是不要忘記在使用iffor和gang時使用像%%1這樣的變量。

如果您忘記了double % ,那麼您將替換(可能為null)命令行參數,並且您將收到一些相當混亂的錯誤消息。




@ECHO OFF
:Loop
IF "%1"=="" GOTO Continue
SHIFT
GOTO Loop
:Continue

注意:如果%1包含在引號本身中,則"%1"==""將導致問題。

在這種情況下,請使用IF [%1]==[]或者在NT 4(SP6)及更高版本中使用IF "%~1"==""




讓我們保持簡單。

這是.cmd文件。

@echo off
rem this file is named echo_3params.cmd
echo %1
echo %2
echo %3
set v1=%1
set v2=%2
set v3=%3
echo v1 equals %v1%
echo v2 equals %v2%
echo v3 equals %v3%

這裡有3個來自命令行的調用。

C:\Users\joeco>echo_3params 1abc 2 def  3 ghi
1abc
2
def
v1 equals 1abc
v2 equals 2
v3 equals def

C:\Users\joeco>echo_3params 1abc "2 def"  "3 ghi"
1abc
"2 def"
"3 ghi"
v1 equals 1abc
v2 equals "2 def"
v3 equals "3 ghi"

C:\Users\joeco>echo_3params 1abc '2 def'  "3 ghi"
1abc
'2
def'
v1 equals 1abc
v2 equals '2
v3 equals def'

C:\Users\joeco>



我寫了一個簡單的read_params腳本,可以將其作為函數(或外部.bat )調用,並將所有變量放入當前環境中。 它不會修改原始參數,因為函數正在使用原始參數的副本進行call

例如,給定以下命令:

myscript.bat some -random=43 extra -greeting="hello world" fluff

在調用函數之後, myscript.bat將能夠使用這些變量:

call :read_params %*

echo %random%
echo %greeting%

功能如下:

:read_params
if not %1/==/ (
    if not "%__var%"=="" (
        if not "%__var:~0,1%"=="-" (
            endlocal
            goto read_params
        )
        endlocal & set %__var:~1%=%~1
    ) else (
        setlocal & set __var=%~1
    )
    shift
    goto read_params
)
exit /B

限制

  • 無法加載沒有值的參數,如-force 。 你可以使用-force=true但我不能想到一種方法來在不知道提前列出參數列表的情況下允許空值,而這些參數沒有值。

更新日誌

  • 2016年2月18日
    • 不再需要延遲擴展
    • 現在通過查找參數與其他命令行參數一起工作。



創建一個新的批處理文件(例如:openclass.bat)並在文件中寫入以下行:

java %~n1

然後放置批處理文件,比如說,system32文件夾,轉到Java類文件,右鍵單擊Properties,Open with ...,然後找到您的批處理文件,選擇它,那就是...

這個對我有用。

PS:當我關閉Java類時,我無法找到關閉cmd窗口的方法。 目前...




Related