#author("2016-09-07T19:31:20+09:00","","")
#contents
*バッチファイル(batファイル) [#c79bf38b]
**サービスを起動・停止する [#n2318ea2]
例: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 [#hb652df4]
rem 5秒程待つ
ping localhost -n 6 >nul
**引数をソートして処理する [#wddcaff9]
@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
**複数のファイルを順番に処理する [#y72a56c5]
@echo off
for %%i in (%*) do call :execute %%i
pause
goto :EOF
:execute
echo %1
exit /b
**文字列の置換 [#n3287a68]
「/」を「-」に置き換え
echo %date%
echo %date:/=-%
結果
2008/07/09
2008-07-09
引数の場合は変数に入れてから置換
SET HOGE=%~t1
ECHO %HOGE:/=-%
**サブルーチンを呼び出す [#n32c7b2f]
CALL :ラベル 引数
***ファイル内のサブルーチンを呼ぶ [#i18371aa]
-サンプルスクリプト(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
***外部ファイル内のサブルーチンを呼ぶ [#q1b6bc7c]
-呼び出し元ファイル(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
**[[標準エラー出力もリダイレクトするには?:http://blog.kumacchi.com/2007/07/msdos.html]] [#wda2b8a6]
program.exe > hogehoge.txt 2>&1
**ERRORLEVELが意図した動作をしない [#k1ea40f0]
[[ERRORLEVEL バッチ ファイル正しいテスト優先:http://support.microsoft.com/kb/39585/ja]]
ERRORLEVEL は降順でテストするべきです。
IF ERRORLEVEL 1 GOTO ONE
IF ERRORLEVEL 0 GOTO ZERO
:ONE
ECHO ONE
:ZERO
ECHO ZERO
** 実行されているバッチファイル自身のパスを取得 [#t84a41d6]
c:\bat\test.bat
SET PWD=%~dp0
ECHO %PWD%
結果
c:\bat\
**参考サイト [#ub79a583]
-[[バッチメモ(Hishidama's bat-file Memo):http://www.ne.jp/asahi/hishidama/home/tech/windows/bat.html]]
-[[バッチファイルの制御用コマンド [FPCU]DOS/V&Windowsコマンド・プロンプト・リファレンス:http://www.fpcu.jp/dosvcmd/batch.htm]]
-[[DOS/Vコマンド・リファレンス@FPCU:http://www.fpcu.jp/dosvcmd/]]