0

単一の引数を持つプロシージャを持つ単純なバッチ スクリプトを作成しようとしています。インターネット上のいくつかのソースに従って、次のサンプルコードを作成しました。

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

call:logMessage "Izomorphius"

しかし、期待した出力が得られません。引数なしで「こんにちは」のみが出力されます。私は何を間違っていますか?

4

4 に答える 4

3

すべてのバッチ関数は、呼び出しコードの後、ファイルの最後に定義する必要があると思います。

call:logMessage "Izomorphius"
goto :eof

:: Start function definitions ---

:logMessage
   @echo on
   echo Hi, %1
   @echo off
   goto :eof
于 2012-09-26T13:40:23.927 に答える
1

これは機能する簡易版です

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

:logMessage
echo Hi, %1

実際には の周りIzomorphiusに引用符が表示されますが、不要な場合は削除してください。

于 2012-09-26T13:30:29.683 に答える
1

コードを微調整するだけで済みます。

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

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

私の以前のコメントによると。

于 2012-09-27T16:37:54.060 に答える
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
于 2012-10-25T22:47:39.070 に答える