2012-09-26 38 views
0

我想創建一個簡單的批處理腳本,該腳本具有單參數的過程。繼互聯網上的一些資料我已經創建了下面的示例代碼:批量傳遞參數到一個函數

:logMessage 
    @echo on 
    echo Hi, %1 
    @echo off 
goto :eof 

call:logMessage "Izomorphius" 

但我沒有得到輸出我期望的 - 只有「你好」,是印刷,沒有爭論。我究竟做錯了什麼?

+0

與您的代碼,唯一的問題是,因爲它的立場,執行將永遠達不到你的'call'聲明。爲了使它起作用,在最上面添加'goto main'這一行,並在'call'語句的上方添加':main'這一行。 –

回答

3

我認爲所有的批處理函數都需要在文件末尾定義,在任何調用代碼之後。

call:logMessage "Izomorphius" 
goto :eof 

:: Start function definitions --- 

:logMessage 
    @echo on 
    echo Hi, %1 
    @echo off 
    goto :eof 
+0

*「我認爲所有批處理函數都需要在文件末尾定義」* - 編號批量確實很舊。函數可以在文件的字面上**任意位置**定義。 –

1

下面是一個簡化版本,工作

@echo off 
call :logMessage "Izomorphius" 
goto :eof 

:logMessage 
echo Hi, %1 

注意,它實際打印各地Izomorphius的報價,而只是將其刪除,如果你不希望他們。

+0

如果您想在%1參數中傳遞多個單詞,則可能需要引號,例如「Izomorphius史密斯」。在這種情況下,爲了刪除引號,你可以使用'echo Hi,%〜1' * – lessthanideal

1

你代碼只需要進行調整:

goto main          & :: Add this line... 
:logMessage 
    @echo on 
    echo Hi, %1 
    @echo off 
goto :eof 

:main           & :: ...and this line. 
call:logMessage "Izomorphius" 

按照我先前的評論。

0

此代碼是越野車,但這是另一招:

@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