パソコン忘備録

バッチ

最終更新:

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

:MYSET
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%

:INIT
if "%1"=="" goto USAGE
set /p input=開始してよろしいですか? (y/n[y])
if "%input%"=="" set input=y
if not "%input%"=="y" goto EOF

:MAIN
echo 処理開始します。
rem <<< ここに処理を書きます >>>

:END
echo 正常終了です。
pause
exit /b 0

:USAGE
echo 使い方:%batname%
exit /b 0

:ERROR
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 */

処理待ち
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



参考
全ては時の中に… : 【コマンド】繰り返し処理
<http://blog.livedoor.jp/akf0/archives/51414068.html#more>

Windowsバッチファイルジェネレーター
<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://doudemoexe.com/Batch/0004.jsp>
記事メニュー
ウィキ募集バナー