バッチファイル
COMMAND.COM
やcmd.
exe
︶がそのファイルを読み、その中のコマンドを︵通常︶一行ずつ実行する[1]。バッチファイルはUNIX系オペレーティングシステムのシェルスクリプトに相当する。
拡張子 | .bat, .cmd (Windows NT) |
---|---|
MIMEタイプ | application/x-bat |
種別 | スクリプト言語 |
歴史
編集COMMAND.COM
である。MS-DOS用バッチプログラムのうち比較的単純なコマンドはCOMMAND.COM
自身が処理し︵内部コマンド︶、複雑なものは別の実行ファイルを呼び出して処理する︵外部コマンド︶。この系統のバッチプログラミングはMS-DOSからWindows 95、Windows 98、Windows Me︵Windows 9x系︶まで発展していった。
Windows 2000およびWindows XP以降はMS-DOSではなくWindows NTに基づいている。この系統︵Windows NT系︶ではcmd.exe
というコマンド行インタプリタが使われ、COMMAND.COM
とはある程度の互換性がある。MS-DOSのいくつかの機能が削除されているが、MS-DOSやMS-DOSベースのWindowsにはない新たな機能も多く追加されている。互換性維持のためCOMMAND.COM
も未だに搭載されている。
2006年には.NET Frameworkを基盤に動作する、モダンなオブジェクト指向のシェル環境としてWindows PowerShellがリリースされた。Windows PowerShellではdir
などの従来のWindowsコマンドに対するエイリアスが用意されており、完全ではないがある程度の互換性がある。PowerShellはWindows以外の環境にも.NET Coreベースで移植されている。
代表的なコマンド
編集この節の加筆が望まれています。 |
echo
編集echo
コマンドは標準出力にメッセージを表示する。メッセージ文字列をダブルクォーテーションやシングルクォーテーションなどで囲む必要はない。
また、echo on
およびecho off
でコマンドエコーのON/OFFを切り替えることができる。コマンドエコーは既定でONになっており、各コマンド行を実行する前に標準出力にその内容を表示する[4]。この動作は通常必要とされないので、echo off
コマンドをバッチファイルの最初に記述してそれを防ぐ。しかし、そのままでは echo off
コマンド自体は表示されてしまう。単価記号 @
をコマンド行の先頭に置くと、その行は表示されないようになっているので、多くのバッチファイルには @echo off
という行が先頭にある。
rem
編集コメント行はrem
で始める。rem
もコマンドの一種である[5]。
cls
編集テキスト画面を削除する。
call
編集別のバッチファイルやラベルで指定したプログラムに処理を移す。バッチファイルにはローカル変数とグローバル変数の概念があり、サブルーチンの中でメインルーチンにある変数と同じ名前の変数を使っても区別される。
他の多くのプログラミング言語と同じように指定した回数ループすることができるコマンドであるが、それのみならずフォルダ内のすべてのファイルを確認しそれらのファイルに対して処理を行うなどと行ったこともできる。基本的には、
for (オプション) %%変数名 in (ループの対象) do(コマンド)
for /l %%変数 in (開始値、増分、終了値) do コマンド
cd
編集指定したディレクトリに移動することができる。cdで移動したディレクトリより階層が深いところにあるファイル、フォルダは、相対パスで参照可能になる。
dir
編集指定したディレクトリの中のファイルのリストを表示する。これを使ってテキストファイル形式のファイルリストを作ることができる。オプションを設定することで特定のファイルのみ表示することもできる。
test.bat ar1 ar2 ar3 ar4 ar5 ar6 ar7 ar8 ar9 ar10
コード:
@echo off
shift
echo 第9引数は%9です。
出力:
第9引数はar10です。
バッチファイル(コマンドプロンプト)には、コマンドの後の返り値、呼び出し時の引数、システムの設定などで値が変わる特殊な変数がある。
%1,%2,%3...%9
編集%CD%
編集cdコマンドなどで指定したディレクトリのパス。この値はcdコマンドなどで変えられる。
%DATE%
編集%TIME%
編集%RANDOM%
編集%ERRORLEVEL%
編集%CMDEXTVERSION%
編集現在の拡張機能のバージョン番号。cmdコマンドで拡張機能を指定してコマンドプロンプトを起動できる。
%HIGHESTNUMANODENUMBER%
編集コンピューター上の最大NUMAノード番号。使うことは滅多にない。
この節の加筆が望まれています。 |
set num=1
if %num% == 1 (
set /a num+=1
echo %num%
)
pause
「!」で囲って参照する方法
編集setlocalコマンドを使う方法
編集setlocal enabledelayede
xpansion
を先頭に記述する方法だ。
これを使うことにより、﹁!﹂で囲った時と同じ効果が得られる。
ちなみに、setlocal enabledelayedexpan
sion
を解除する方法は、解除したい行でendlocal
を入力するだけだ。
例
編集- 単純なバッチファイルの例:
@echo off
cls
echo.
echo Hello World, press any key to start AProgram.exe!
pause > nul
AProgram.exe
echo.
echo AProgram has finished whatever it was doing. Have fun today!
画面出力:
Hello World, press any key to start AProgram.exe!
AProgram has finished whatever it was doing. Have fun today!
@echo off
echo Hello world!!
pause > nul
画面出力:
Hello world!!
- 3の倍数ならFizz、5の倍数ならBuzz、15の倍数ならFizz Buzzと表示し、FizzBuzz.txt に結果を出力
@echo off
setlocal enabledelayedexpansion
cd /d %~dp0
if exist %cd%\FizzBuzz.txt del %cd%\FizzBuzz.txt
for /l %%i in (1,1,100) do (
set echo=
set /a f=%%i%%3,b=%%i%%5
if !f!==0 set echo=!echo!Fizz
if !b!==0 set echo=!echo!Buzz
if "!echo!"=="" set echo=%%i
echo !echo!>>%cd%\FizzBuzz.txt
)
画面出力:なし
- FFmpegでエンコード バッチファイルの置かれたディレクトリを終了するまで10秒おきに監視して、tsファイルを発見次第バッチファイルと同じフォルダに置かれたffmpeg.exeでmp4にエンコードしたあと、元のファイルを削除する。 エンコードされたファイルが既に存在する場合は上書きする。
echo off cd %~dp :loop for %%i in (*.ts) do ( call :encode %%i% ) timeout 10 goto :loop :encode ffmpeg.exe -i "%1" -vf bwdif=1 -c:v libx264 -c:a copy -bsf:a aac_adtstoasc ^ -preset fast -aspect 16:9 -b:v 5500k -y "%~n1.mp4" del %1 exit /b
まず、forループでファイルが有るかどうかチェックする。見つかったファイルは:encodeというサブルーチンに渡される。これはエンコード後のファイル名をつける際の%~n1で元のファイルのファイル名だけを抽出する必要があるからだ。 encodeの中でファイルをffmpegに渡してエンコードし、その後delコマンドでファイルを削除したら、サブルーチンが終了し、メインルーチンに戻る。tsファイルがまだ残っていれば再びエンコードする。なければforループから抜け出し、10秒間待機する。再びtsファイルを発見すると順次エンコードする。互換コマンドインタプリタ
編集マイクロソフト以外が提供するコマンドインタプリタにも様々なコマンドインタプリタがあり、強化された機能を提供している。4DOS はその一例である。
バッチプログラムを実行ファイルに変換するコンパイラもマイクロソフト以外からいくつか登場しているが、その品質は様々である。
IBMのOS/2オペレーティングシステムもマイクロソフトのOSと似たようなテキストベースのコマンド機能を持っている。
脚注
編集(一)^ waitforコマンドを使えば同期処理ができる。 (二)^ “.cmdファイルとは - IT用語辞典”. IT用語辞典 e-Words. 2022年8月11日閲覧。 (三)^ “IT用語辞典︻ バッチファイル の意味と同義語 ︼”. www.pastem.jp. 2022年8月11日閲覧。 (四)^ echo | Microsoft Docs (五)^ rem | Microsoft Docs (六)^ “.bat︵バッチファイル︶のforコマンド解説。”. Qiita. 2021年3月6日閲覧。 (七)^ “shift︵引数をずらして格納しなおす︶”. 知識ゼロからのwindowsバッチファイル超入門. 2022年8月10日閲覧。 (八)^ Src="https://Secure.gravatar.com/Avatar/?s=34, <img Alt=. “バッチファイルで変数を使う”. 知識ゼロからのwindowsバッチファイル超入門. 2022年8月8日閲覧。 (九)^ “バッチファイル界の魔境﹃遅延環境変数﹄に挑む︵おまけもあるよ︶”. Qiita. 2022年8月9日閲覧。関連項目
編集外部リンク
編集