我想創建一個簡單的批處理腳本,該腳本具有單參數的過程。繼互聯網上的一些資料我已經創建了下面的示例代碼:批量傳遞參數到一個函數
:logMessage
@echo on
echo Hi, %1
@echo off
goto :eof
call:logMessage "Izomorphius"
但我沒有得到輸出我期望的 - 只有「你好」,是印刷,沒有爭論。我究竟做錯了什麼?
我想創建一個簡單的批處理腳本,該腳本具有單參數的過程。繼互聯網上的一些資料我已經創建了下面的示例代碼:批量傳遞參數到一個函數
:logMessage
@echo on
echo Hi, %1
@echo off
goto :eof
call:logMessage "Izomorphius"
但我沒有得到輸出我期望的 - 只有「你好」,是印刷,沒有爭論。我究竟做錯了什麼?
我認爲所有的批處理函數都需要在文件末尾定義,在任何調用代碼之後。
call:logMessage "Izomorphius"
goto :eof
:: Start function definitions ---
:logMessage
@echo on
echo Hi, %1
@echo off
goto :eof
*「我認爲所有批處理函數都需要在文件末尾定義」* - 編號批量確實很舊。函數可以在文件的字面上**任意位置**定義。 –
下面是一個簡化版本,工作
@echo off
call :logMessage "Izomorphius"
goto :eof
:logMessage
echo Hi, %1
注意,它實際打印各地Izomorphius
的報價,而只是將其刪除,如果你不希望他們。
如果您想在%1參數中傳遞多個單詞,則可能需要引號,例如「Izomorphius史密斯」。在這種情況下,爲了刪除引號,你可以使用'echo Hi,%〜1' * – lessthanideal
你代碼只需要進行調整:
goto main & :: Add this line...
:logMessage
@echo on
echo Hi, %1
@echo off
goto :eof
:main & :: ...and this line.
call:logMessage "Izomorphius"
按照我先前的評論。
此代碼是越野車,但這是另一招:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
echo.
set "NAME=Izomorphius"
call :prepend NAME Hi
echo Message: %NAME%
echo.
goto :end
:: Functions
:prepend @varname @value
set %1=%2 !%1!
exit /B 0
:end
pause
與您的代碼,唯一的問題是,因爲它的立場,執行將永遠達不到你的'call'聲明。爲了使它起作用,在最上面添加'goto main'這一行,並在'call'語句的上方添加':main'這一行。 –