単一の引数を持つプロシージャを持つ単純なバッチ スクリプトを作成しようとしています。インターネット上のいくつかのソースに従って、次のサンプルコードを作成しました。
: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
に引用符が表示されますが、不要な場合は削除してください。
コードを微調整するだけで済みます。
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