パソコン忘備録
バッチ
最終更新:
Bot(ページ名リンク)
-
view
バッチ
比較演算子
EQU | 等しい( = ) |
NEQ | 等しくない( NOT = ) |
LSS | ~より小さい( < ) |
LEQ | ~以下( <= ) |
GTR | ~より大きい( > ) |
GEQ | ~以上( >= ) |
パラメータ
%* | 引数(*, 1~9) |
%~1 | すべての引用句 (") を削除して、%1 を展開します |
%~f1 | %1 を完全修飾パス名に展開します |
%~d1 | %1 をドライブ文字だけに展開します |
%~p1 | %1 をパスだけに展開します |
%~n1 | %1 をファイル名だけに展開します |
%~x1 | %1 をファイル拡張子だけに展開します |
%~s1 | 展開されたパスは、短い名前だけを含みます |
%~a1 | %1 をファイル属性に展開します |
%~t1 | %1 をファイルの日付/時刻に展開します |
%~z1 | %1 をファイルのサイズに展開します |
%~$PATH:1 | PATH 環境変数に指定されているディレクトリを検索し 最初に見つかった完全修飾名に %1 を展開します 環境変数名が定義されていない場合、または 検索してもファイルが見つからなかった場合は、 この修飾子を指定すると空の文字列に展開されます |
%~dp1 | %1 をドライブ文字とパスだけに展開します |
%~nx1 | %1 をファイル名と拡張子だけに展開します |
%~dp$PATH:1 | PATH 環境変数に指定されているディレクトリを 検索して %1 を探し、最初に見つかったファイルのドライブ文字とパスだけに展開します |
%~ftza1 | %1 を DIR の出力行のように展開します |
■IF文
IF文 | ECHO OFF IF "%1" EQU "" ( SET PARAM1=abc ) ELSE ( SET PARAM1=%1 ) ECHO %PARAM1% ECHO ON PAUSE |
■FOR文
FOR文 | FOR /L %変数名 IN (開始値,増減値,終了値) DO コマンド | ||
C:\>FOR /L %%i IN (1,1,5) DO ( notepad.exe echo %%i ) PAUSE | |||
FOR /F のオプション文字列一覧 | |||
名前 | 使用例 | 意味 | |
eol | eol=; | コメント行の先頭に書く文字です。1文字です。 | |
初期値は「;」(= セミコロン)です。都合が悪い時に "eol=#"のように変更します。 | |||
o 基本的には、次の時に、1行スキップします。 | |||
+ 行の先頭が eolで指定した文字の時 | |||
+ eolの指定が無い時は、「;」(= セミコロン)です。 | |||
+ 行の先頭が列区切り文字(delimsの値)で、直後にeolの値が続く時 | |||
o 但し、行をスキップしない場合があります。 | |||
+ 下記のように、「eolとdelimsに、半角空白以外の同じ文字を指定」した場合です。 | |||
eol を無効にする方法 (Windows XP Service Pack 3の場合) | |||
+ 半角空白以外で、delims の値と同じ値を指定すると、回避出来ました。 | |||
+ この時、FORコマンドは、「先頭の eolの値が削除された状態」で、行の値を取得します。 | |||
+ 例外は半角空白。"delims= eol= "の場合、eolは有効です。 | |||
+ また、"eol=" と書くと、「"」がeolの値になります。 | |||
+ カンマ区切りに合わせる時は、"delims=, eol=,"。 | |||
+ (ヘルプにはありませんので、他のOSでは要検証) | |||
skip | skip=3 | ファイルの先頭で読み飛ばす行数を指定します。 | |
指定出来る値は、1 以上です。 | |||
delims | delims=, | 列区切り文字を指定します。2文字以上指定すると、単語で区切ります。 | |
例えば「ミクさん」を指定すると、文字列「ミクさん」で区切ります。 | |||
初期値は、半角空白とタブです。 | |||
tokens | tokens=1,2,3-5,* | 取り出す文字列の位置を指定します。 | |
初期値は 1 です。1列目だけ取り出します。 | |||
記号の意味について | |||
+ 「,」(= カンマ) = 例えば 1,2。別の変数として取り出します。 | |||
+ 「-」(= ハイフン) = 例えば 3-5。カンマを沢山書く時と同じです。 | |||
+ 「*」= 以降の文字列を1つの文字列として取得します。 | |||
tokensで数字を複数指定した時に使用出来る変数名 | |||
+ 使用例で、変数に%fを使っている時、次のように値が変数に入ります。 | |||
+ %f = 1列目の値 | |||
+ %g = 2列目の値 | |||
+ %h = 3列目の値 | |||
+ %i = 4列目の値 | |||
+ %j = 5列目の値 | |||
+ %k = 6列目以降の値。 | |||
+ (FORコマンドで指定した変数からのアルファベット順です) | |||
+ (バッチファイルに書く時は、%%i のように%を2つ書きます) | |||
delimsとの関係について | |||
+ 行先頭の区切り文字は無視します。 | |||
+ また、区切り文字の複数並びは、1文字扱いです。 | |||
tokens で指定する数字について (Windows XP Service Pack 3の場合) | |||
+ delimsを参照しながら、数字の位置にある値を取り出します。 | |||
+ 数字の並びに関係なく、行の先頭にある値から順に、変数に割り当てます。 | |||
+ 同じ数字を複数指定しても、取り出す値は1つです。 | |||
usebackq | usebackq | FOR コマンドの、IN の括弧内の解析方法を変更します。 | |
「`」(= 逆引用符)で囲むと実行コマンド(通常は、「'」(= 一重の引用符)) | |||
「'」(= 一重の引用符)で囲むと文字列(通常は、「"」(= 二重引用符)) | |||
「"」(= 二重引用符)で囲むとファイル名。引用符無しもファイル名(通常は、引用符無しのみファイル名) |
■その他
メッセージ (ポップアップ) |
MSG User /SERVER:localhost メッセージのテスト |
ダミーファイル | fsutil file createnew D:\dummy 104857600 |
Hotfix一覧取得 | wmic qfe > hotfix.txt |
共有ファイルのロックを外す | Net File Net File [ID] /close |
■テンプレート
SET COUNT=0
SET DATA=""
FOR /F "" %%i IN (data.txt) DO @CALL :MYSET %%i
ECHO %DATA%
EXIT /B
SET COUNT=0
SET DATA=""
FOR /F "" %%i IN (data.txt) DO @CALL :MYSET %%i
ECHO %DATA%
EXIT /B
:MYSET
SET /A COUNT=%COUNT%+1
@REM 1行目だったらDATAへSET
IF %COUNT%==1 SET DATA=%1
@REM EXIT /B で呼び出し元へ戻る
EXIT /B
SET /A COUNT=%COUNT%+1
@REM 1行目だったらDATAへSET
IF %COUNT%==1 SET DATA=%1
@REM EXIT /B で呼び出し元へ戻る
EXIT /B
@echo off
set basedir=%~dp0
set batname=%~n0%~x0
set datestr=%DATE:/=%
set timestrtmp=%TIME: =0%
set timestr=%timestrtmp:~0,2timestrtmp:~3,2timestrtmp:~6,2%
set timestamp=%datestr%-%timestr%
set basedir=%~dp0
set batname=%~n0%~x0
set datestr=%DATE:/=%
set timestrtmp=%TIME: =0%
set timestr=%timestrtmp:~0,2
set timestamp=%datestr%-%timestr%
:INIT
if "%1"=="" goto USAGE
set /p input=開始してよろしいですか? (y/n[y])
if "%input%"=="" set input=y
if not "%input%"=="y" goto EOF
if "%1"=="" goto USAGE
set /p input=開始してよろしいですか? (y/n[y])
if "%input%"=="" set input=y
if not "%input%"=="y" goto EOF
:MAIN
echo 処理開始します。
rem <<< ここに処理を書きます >>>
echo 処理開始します。
rem <<< ここに処理を書きます >>>
:END
echo 正常終了です。
pause
exit /b 0
echo 正常終了です。
pause
exit /b 0
:ERROR
echo エラー終了です。
exit /b -1
echo エラー終了です。
exit /b -1
:EOF
コメント
rem コメント
break コメント
:コメント
goto hoge\nコメント\n:hoge
exit /b\nコメント
^\n\nコメント
%コメント%
!コメント!
2>nul コメント
2>nul (コメント)
/* >nul 2>nul 3>nul 4>nul\n コメント \n>nul 2>nul 5>con 6>con */
break コメント
:コメント
goto hoge\nコメント\n:hoge
exit /b\nコメント
^\n\nコメント
%コメント%
!コメント!
2>nul コメント
2>nul (コメント)
/* >nul 2>nul 3>nul 4>nul\n コメント \n>nul 2>nul 5>con 6>con */
処理待ち
timeout
timeout /T 99999 /NOBREAK
choice
choice /c:abcde /t:2 /d:e ※タイムアウトを使うときは規定値(/d)が必要
waitfor
waitfor [/s <Computer>[/u [<Domain> \] <User>[/p [<Password>]]/si <SignalName> waitfor [/t <Timeout>] <SignalName>
rundllex
rundllex Sleep,1000
echo off
cls
:op
echo.
echo [A] A
echo [B] B
echo [C] C
echo [D] D
echo [E] END
echo.
choice /c:abcde
IF ERRORLEVEL 5 GOTO end
IF ERRORLEVEL 4 GOTO d
IF ERRORLEVEL 3 GOTO c
IF ERRORLEVEL 2 GOTO b
IF ERRORLEVEL 1 GOTO a
GOTO end
cls
:op
echo.
echo [A] A
echo [B] B
echo [C] C
echo [D] D
echo [E] END
echo.
choice /c:abcde
IF ERRORLEVEL 5 GOTO end
IF ERRORLEVEL 4 GOTO d
IF ERRORLEVEL 3 GOTO c
IF ERRORLEVEL 2 GOTO b
IF ERRORLEVEL 1 GOTO a
GOTO end
参考
全ては時の中に… : 【コマンド】繰り返し処理
<http://blog.livedoor.jp/akf0/archives/51414068.html#more>
<http://blog.livedoor.jp/akf0/archives/51414068.html#more>
Windowsバッチファイルジェネレーター
<http://kurukurupapa001.appspot.com/winbatchgen/www/win_batch_gen.html>
<http://kurukurupapa001.appspot.com/winbatchgen/www/win_batch_gen.html>
FOR /F その1 = FOR文でファイルを1行ずつ取り出して実行する方法 - Windowsのコマンドプロンプト(bat,cmd) - to_dk notebook
<http://tounderlinedk.blogspot.jp/2011/05/for-f-1-for1-windowsbatcmd.html>
<http://tounderlinedk.blogspot.jp/2011/05/for-f-1-for1-windowsbatcmd.html>
CMD.EXEの遅延環境変数の展開 - ふなWiki
<http://blue-red.ddo.jp/~ao/wiki/wiki.cgi?page=CMD.EXE%A4%CE%C3%D9%B1%E4%B4%C4%B6%AD%CA%D1%BF%F4%A4%CE%C5%B8%B3%AB>
<http://blue-red.ddo.jp/~ao/wiki/wiki.cgi?page=CMD.EXE%A4%CE%C3%D9%B1%E4%B4%C4%B6%AD%CA%D1%BF%F4%A4%CE%C5%B8%B3%AB>
どーでもえぐぜ
<http://doudemoexe.com/Batch/0004.jsp>
<http://doudemoexe.com/Batch/0004.jsp>