サーチ…


備考

関数に開始変数を追加するには、そのラベルに<parameter>を追加し<parameter> 。これらの出発の変数はしてアクセスすることができます%n nが始まる変数の数(ある%1最初のため、 %2秒のためにこれ。 %nの方法は、%1のために働く- 。%9パラメータ10の場合- 255、あなたが必要となりますShiftコマンドを使用します )。
例えば:

:function <var1> <var2>

call :function param1 param2を使用するcall :function param1 param2param1%1でアクセスでき、 param2%2でアクセスできます。
注意: <parameter>は厳密には必要ではありませんが、読みやすくするために役立ちます。

多くの変数が飛んでいるときに便利なトリックは、 %nと並行してsetlocalendlocalを使用することです。 setlocalendlocal本質的にコマンドプロンプトの独自のインスタンスであり、その中に設定されている変数はフレーム内にある間だけ固執します。

setlocalendlocalsetlocal 、グローバル値を返す場合は、これを使用します。

endlocal & set var=variable

グローバルvariable varvariable設定しvariable 。これらを複数の変数に1つにまとめることができます。

endlocal & set var=variable & set var2=variable number 2

グローバル変数varvariableし、グローバル値var2variable 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

セクション内のsetlocalendlocalセクションの変数は、呼び出し元の変数とは別になっています。そのため、%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

これは、基本的な関数、 setlocalendlocal 、および引数を使用して、奇妙な小さな関数を作成します。

バッチファイル内の匿名関数

匿名関数のテクニックは、サブルーチンが呼び出されたときに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 - ###

詳細情報について確認し、これを



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow