@echo off
setlocal enabledelayedexpansion
:://///////////////////////////////////
:: UpDate : yyyy-mm-dd
::
:: FileName : xxxxxx
:: FunctionName : xxxxxx
::
:://///////////////////////////////////
::// initialize
set flgPUSHD=0 1
if %flgPUSHD% eq 1 (
set CURRENTDIR=%~dp0
pushd ..
)
set PARENTDIR=%CD%
set SOURCEDIR=
set TARGETDIR=
set CURRENTUSER=%USERNAME%
set d=%date: =0%
set t=%time: =0%
set NOWDATE=%d:~0,4%%d:~5,2%%d:~8,2%
set NOWTIME=%t:~0,2%%t:~3,2%%t:~6,2%
set MICROSEC=%t:~9,2%
set SUFFIXNAME=%CURDATE:~5,2%%CURDATE:~8,2%
::// main
call :func_Name arg1 arg2
call :end
:end
:: PARENTDIR reset
popd
exit /b
::// functions
:func_Name
setlocal
set ARG1=%1
set ARG2=%2
set XXX=9999
exit /b
setlocal enabledelayedexpansion | エラー判定でERRORLEVELを遅延展開 endlocalでスコープ限定することで副作用を軽減できる |
set 定数名=値 | 定数 |
%~dp0 | カレントディレクトリ取得(%~系はファイル名取得など多数ある) |
pushd | ディレクトリスタック(メモリ記憶) メモリ開放(popd)とセットで使う |
%CD% | カレントディレクトリ取得 |
%USERNAME% | ログインユーザー名取得 |
%date: =0% | 0埋めフォーマット(202123⇒20210103) |
%DATE:~0,4%%DATE:~5,2%%DATE:~8,2% | フォーマット (開始文字数目、終了文字数目を取得。%は半角%) |
:: | 疑似コメント行(本来はREMがコメント行宣言。REMarksの略) |
call :ラベル名 引数1 引数2 | 疑似関数呼び出し 本来はラベル行以降の処理を呼び出す為だが疑似関数を呼び出すことも出来る |
call 外部ファイル 引数1 引数3 | 疑似関数呼び出し 外部バッチファイルを呼び出す場合 |
:ラベル名 ~処理~ exit /b |
疑似関数を作る際に関数名として利用 終了定義がないため関数終了部分に exit /b を記す必要がある(戻り値を設定しても良い) |
exit /b 0 | スクリプトを終了し、エラーレベルを返す エラーレベル0=正常終了、1=異常終了 |
exit /b %3値 | 戻り値(%3 値)を返す |
エラーレベル(%ERROELEVEL%) | 特に桁数の規定はないようなので0、1以外の数字は任意のものが使える。 |
@echo off
setlocal
set /p inputvar=数字を入力:
echo 入力 %inputvar%
call :inputform %inputvg%
endlocal
exit /b
:inputform
if "%inputvar%" equ "" (
set /p inputvg=数字を入力:
goto :inputform
) else (
echo 数字が設定されました。
)
exit /b