batch-file
関数
サーチ…
備考
関数に開始変数を追加するには、そのラベルに<parameter>
を追加し<parameter>
。これらの出発の変数はしてアクセスすることができます%n
nが始まる変数の数(ある%1
最初のため、 %2
秒のためにこれ。 %n
の方法は、%1のために働く- 。%9パラメータ10の場合- 255、あなたが必要となりますShiftコマンドを使用します )。
例えば:
:function <var1> <var2>
call :function param1 param2
を使用するcall :function param1 param2
、 param1
は%1
でアクセスでき、 param2
は%2
でアクセスできます。
注意: <parameter>
は厳密には必要ではありませんが、読みやすくするために役立ちます。
多くの変数が飛んでいるときに便利なトリックは、 %n
と並行してsetlocal
とendlocal
を使用することです。 setlocal
とendlocal
本質的にコマンドプロンプトの独自のインスタンスであり、その中に設定されている変数はフレーム内にある間だけ固執します。
setlocal
とendlocal
をsetlocal
、グローバル値を返す場合は、これを使用します。
endlocal & set var=variable
グローバルvariable
var
をvariable
設定しvariable
。これらを複数の変数に1つにまとめることができます。
endlocal & set var=variable & set var2=variable number 2
グローバル変数var
をvariable
し、グローバル値var2
をvariable number 2
ます。
コードブロック内のコードも同時に実行されるため、これを行うこともできます。
if "%var%"=="" (
endlocal
set %~2=10
)
しかし、あなたはこれをすることはできません。
if "%var%"=="" (
set %~2=10
endlocal
)
シンプルファンクション
call :FunctionX
rem More code...
:FunctionX
rem Some code here.
goto :eof
これは非常に単純な関数です。関数は、一度に複数のコマンドを実行するプログラム内コマンドです。関数は、ラベルを作成してコードを入力することによって作成され、実行されるとgoto :eof
またはexit /b <ErrorlevelYou'dLike>
を追加して、呼び出された場所に戻ります。関数はcall :functionname adparams
呼び出されcall :functionname adparams
。
パラメータ付き関数
call :tohex 14 result
rem More code...
:tohex <innum> <outvar>
set dec=%1
set outvar=%~2
rem %n and %~n are functionally identical, but %~n is slightly safer.
goto :eof
これは、関数が別のバッチファイルであるかのように、 call
から追加のパラメーターを取ります。
注: <parameter>
は必須ではありませんが、読みやすくするために役立ちます。
機能setlocalとendlocalを利用した機能
set var1=123456789
set var2=abcdef
call :specialvars
echo %var1%, %var2%
rem More code...
:specialvars
setlocal
set var1=987654321
set var2=fedcba
endlocal
goto :eof
セクション内のsetlocal
、 endlocal
セクションの変数は、呼び出し元の変数とは別になっています。そのため、%var1%と%var2%は変更されませんでした。
それらをすべて組み合わせる
set importantvar=importantstuff
call :stuff 123 var1
rem More code...
:stuff <arg1> <arg2>
setlocal
set importantvar=%~1
echo Writing some stuff into %~2!
endlocal
set %~2=some stuff
setlocal
set importantvar=junk
endlocal
goto :eof
これは、基本的な関数、 setlocal
とendlocal
、および引数を使用して、奇妙な小さな関数を作成します。
バッチファイル内の匿名関数
匿名関数のテクニックは、サブルーチンが呼び出されたときにCALL
コマンドが内部的にGOTO
使用し、可変倍精度のヘルプメッセージの印刷を乱用するという事実を利用しています。
@echo off
setlocal
set "anonymous=/?"
call :%%anonymous%% a b c 3>&1 >nul
if "%0" == ":%anonymous%" (
echo(
echo Anonymous call:
echo %%1=%1 %%2=%2 %%3=%3
exit /b 0
)>&3
匿名関数は、 CALL
後に定義されている場合(または、大括弧内でCALL
が実行されている場合は大括弧の後に定義されている場合)のみ呼び出すことができます。 外部のスクリプトから呼び出すことはできませんが、通常の関数呼び出しよりも遅いです。
別のバッチファイルから関数を呼び出す
library.cmdというファイルがあります。
@echo off
echo -/-/- Batch Functions Library -/-/-
:function1
echo argument1 - %1
goto :eof
ファイルの残りのコードなしで:function1だけを実行するには、caller batにlabel :function1を入れ、次のように使用する必要があります:
@echo off
call :function1 ###
exit /b %errorlevel%
:function1
library.bat %*
出力は次のようになります( library.cmd
内の関数外のコードは実行されません)。
引数1 - ###
詳細情報について確認し、これを 。