バッチファイル(batファイル) †
サービスを起動・停止する †
例:MySQLの場合
@ECHO OFF REM サービス名 SET SNAME=MySQL REM プロセス名 SET PNAME="mysqld-nt.exe" REM プロセスの起動確認 TASKLIST | FIND %PNAME% > NUL IF NOT ERRORLEVEL 1 ( REM プロセスが起動していた場合 NET STOP %SNAME% ) ELSE ( NET START %SNAME% )
Sleep †
rem 5秒程待つ ping localhost -n 6 >nul
引数をソートして処理する †
@echo off rem ソート処理 if exist %~dp0filelist.txt del %~dp0filelist.txt for %%i in (%*) do ( echo %%i >> %~dp0filelist.txt ) sort.exe %~dp0filelist.txt > %~dp0filelist2.txt for /F %%i in ( %~dp0filelist2.txt ) do echo %%i if exist %~dp0filelist.txt del %~dp0filelist.txt if exist %~dp0filelist2.txt del %~dp0filelist2.txt pause exit
複数のファイルを順番に処理する †
@echo off for %%i in (%*) do call :execute %%i pause goto :EOF :execute echo %1 exit /b
文字列の置換 †
「/」を「-」に置き換え
echo %date% echo %date:/=-%
結果
2008/07/09 2008-07-09
引数の場合は変数に入れてから置換
SET HOGE=%~t1 ECHO %HOGE:/=-%
サブルーチンを呼び出す †
CALL :ラベル 引数
ファイル内のサブルーチンを呼ぶ †
- サンプルスクリプト(a.bat)
@ECHO OFF CALL :SUBROUTINE hoge fuga ECHO [呼び出し元] ECHO %1 ECHO %2 GOTO :EOF :SUBROUTINE ECHO [SUBROUTINE] ECHO %1 ECHO %2 EXIT /b
- 実行結果
C:\>a.bat 1 2 [SUBROUTINE] hoge fuga [呼び出し元] 1 2
外部ファイル内のサブルーチンを呼ぶ †
- 呼び出し元ファイル(b.bat)
@ECHO OFF CALL c.bat SUBROUTINE2 hoge fuga ECHO [呼び出し元] ECHO %1 ECHO %2
- サブルーチンを含むファイル(c.bat)
@ECHO OFF REM 引数チェック IF %1.==. GOTO NOPARAM IF %1==SUBROUTINE1 GOTO SUBROUTINE1 IF %1==SUBROUTINE2 GOTO SUBROUTINE2 GOTO BADPARAM :SUBROUTINE1 SHIFT ECHO [SUBROUTINE1] ECHO %1 ECHO %2 EXIT /b :SUBROUTINE2 SHIFT ECHO [SUBROUTINE2] ECHO %1 ECHO %2 EXIT /b :NOPARAM ECHO サブルーチン名が指定されていません。 GOTO :EOF :BADPARAM ECHO 有効なサブルーチン名が指定されていません。
- 実行結果
[SUBROUTINE2] hoge fuga [呼び出し元] 1 2
標準エラー出力もリダイレクトするには? †
program.exe > hogehoge.txt 2>&1
ERRORLEVELが意図した動作をしない †
ERRORLEVEL は降順でテストするべきです。
IF ERRORLEVEL 1 GOTO ONE IF ERRORLEVEL 0 GOTO ZERO :ONE ECHO ONE :ZERO ECHO ZERO
実行されているバッチファイル自身のパスを取得 †
c:\bat\test.bat
SET PWD=%~dp0 ECHO %PWD%
結果
c:\bat\