Programming Field

Unix系シェルコマンドと類似のコマンド一覧 - DOS/コマンドプロンプト コマンド一覧

このページではUnix系(Linux系)でのシェルにおいて標準で使用可能なコマンドを、MS-DOSプロンプト/コマンドプロンプトで使用可能なコマンドに置き換えるとした場合にどのようなコマンドになるか(あるいは代替不可能か)を紹介しています。

ただし、代わりとなるコマンドが存在する場合でも、構文が大きく異なったりUnix系で(追加オプションなどで)可能だったことができなったりする場合が多くありますので、MS-DOSプロンプト/コマンドプロンプト向けにうまく書き直す必要があります。

※ ここでは便宜上、Linux系も含めて「Unix系」と呼びます。
※ CygwinやGnuWin32などをインストールして利用することでUnix系のコマンドを利用することができる場合がありますが、ここではそれらを扱いません。

標準ビルトインコマンド

シェルプログラム自身が解釈するコマンドです。ここではBourne Shellの主なビルトインコマンドを挙げています。

: (コロン)

近いコマンドはRemコマンドですが、Unix系のコロンはパイプやリダイレクションが働いてしまうのに対し、Remコマンドは「^」が一部効く・「/?」を使うことができない以外は特殊文字の効果が働かず何を記述しても何も処理しません。また、Remコマンドは終了コード(Errorlevel)をリセットしません。

break

コマンドプロンプトにおける「( )」によるコマンドブロックは、breakのようなコマンドで外に抜けることができません。バッチファイルの場合、「( )」の外に抜けるのであれば、Gotoとラベル(「:」で定義)を組み合わせて行うことができます。

cd

Cd, Chdirコマンドがほぼ同一です。ただし以下の点で異なります。

  • ドライブをまたがる移動は標準ではできません。([Windows NT系][拡張構文] /D オプションを付加すると可能です。)
  • シンボリックリンクの解決に関するオプション(Unix系cdコマンドの -P など)は存在しません。

continue

コマンドプロンプトにおけるForコマンド「( )」によるコマンドブロックの組み合わせにおいて、continueのようなコマンドブロックの途中で次のループを回すように処理をスキップする方法はありません。IfコマンドGotoコマンドなどで処理順をうまく調整する必要があります。(※ 「( )」内にラベルを記述することはできません。)

eval

環境変数にコマンドが記述されている場合、「%」を使用してコマンドの先頭で変数を展開すると、MS-DOSプロンプト/コマンドプロンプトでは変数の内容をコマンドの一部として解釈します。例えば以下のようになります。

set MY_CMD=echo Hello
%MY_CMD% world

これを実行すると、2行目が「echo Hello world」として扱われ、画面に「Hello world」が出力されます。

exec

現在の環境をそのままに別プログラムを実行するコマンドはありません。ただしバッチファイルAから別のバッチファイルBを実行する場合、Callを付けずにバッチファイルBを実行すると、バッチファイルAはその時点で処理が打ち切られるというexecに近い挙動を得られます。

exit

MS-DOSプロンプト/コマンドプロンプトにExitコマンドが存在します。ただし終了コードは何も指定しない場合常に 0 となります(終了コードオプションは [Windows NT系] のみ)。また、バッチファイル内でバッチファイルのみを抜ける場合は /B オプションが必要であり([Windows NT系] のみ)、指定しなかった場合はバッチファイルを処理するMS-DOSプロンプト/コマンドプロンプト自身も終了します。(/B を使わずに回避する場合はバッチファイルの末尾にGotoで処理を移す必要があります。)

[Windows NT系][拡張構文] なお、Unix系におけるreturnに対応するコマンドもExitコマンドとなります。

export

Setコマンドで設定した環境変数は常に子プロセス/子コマンド/子バッチファイルに引き継がれます。すべての環境変数を表示する場合(「export -p」)はオプションを付けずにSetコマンドを実行します。なお、「-n」や「-f」に対応する挙動はありません。

getopts

対応するコマンドはMS-DOSプロンプト/コマンドプロンプトにありません。自力で %1~%9 を解析する必要があります。(Windows NT系で拡張構文が使える場合はSetコマンドで一時的に別の環境変数に代入しつつ、「%」文字の変数展開を工夫することである程度複雑なパラメーター解析を行うことができます。)

hash

対応するコマンドはMS-DOSプロンプト/コマンドプロンプトにありません。(詳細は未調査です。)

pwd

Cd, Chdirコマンドを引数なしで実行するのにほぼ一致します。ただしシンボリックリンクの解決に関するオプション(Unix系cdコマンドの -P など)は存在しません。

[Windows NT系][拡張構文] コマンドの一部として現在のディレクトリの値を利用したい場合は特殊な環境変数「CD」が使用できます。

readonly

環境変数に読み取り専用の概念がないため、readonlyに対応するコマンドは存在しません。

return

[Windows NT系][拡張構文] Callコマンドでラベルの処理を呼び出した場合(サブルーチンのような処理)はExitコマンドを「/B」オプションを付けて利用します。

shift

Shiftコマンドが利用できます。ただし2個以上のShiftを一度に行う場合はWindows NT系の拡張機能が有効になっている必要があります。また、Unix系と異なり %0 もShift対象になります。

source, . (ドット)

バッチファイル以外に記述されたコマンドを処理することはできません(バッチファイルであれば通常のコマンド/プログラムと同様の方法で実行することができます)。

[Windows NT系][拡張構文] Forコマンドの /F オプションでテキストファイルを解析し、上述のevalと同様の方法を行うことでsourceコマンドとある程度同様の処理を行うことができます。ただしこの方法でビルトインコマンドを実行することはできず、「@」文字などもプログラム名の一部と解釈されてしまいます。

test, [

同様のコマンドは存在せず、比較処理はIfコマンドでの比較に限られます(「&&」などの左側のコマンドとして比較コマンドを入れることはできません)。

times

対応するコマンドはMS-DOSプロンプト/コマンドプロンプトにありません。

trap

シグナル(Signal)の概念がMS-DOSプロンプト/コマンドプロンプト上には無いため、対応するコマンドがMS-DOSプロンプト/コマンドプロンプトにありません。(Ctrl+Cをバッチファイルでハンドルすることもできません。)

※ ネイティブプログラムであれば似たような概念を利用することは可能です(Ctrl+C のハンドルも可能です)。

umask

[Windows NT系] 新たに作成されるファイル/ディレクトリに対する既定の権限を設定する方法はなく、親フォルダーに「サブフォルダー」および「ファイル」に適用される権限が設定されている場合はそれらが継承され、設定されていない場合はシステム既定の権限が設定されます。権限の継承設定などはエクスプローラー上のフォルダーのプロパティにある「セキュリティ」タブかIcaclsプログラムで行います。

unset

Setコマンドを「名前=」のみで値を何も指定せずに実行した場合、その環境変数を削除することができます。なお、「-v」や「-f」に対応するオプションはありません。

FHS(Filesystem Hierarchy Standard)コマンド

ほとんどの場合 /bin ディレクトリ以下に存在するコマンドです。ここではFHSコマンドで必須とされるコマンドを主に挙げています。

cat

ファイルの中身を単に出力するだけであればTypeコマンドが利用できます。複数のファイルを連結したい場合はリダイレクション「>>」を利用するかCopyコマンドの連結機能を利用します。

また、出力結果に行番号を付加したい場合は、(書式は異なりますが)Findコマンドを用いて以下のようにすることができます。(「空文字列を含まない行」を検索すると末尾が改行で終わるファイル/出力データの最後の文字がない行以外すべてが出力されます。)

find /N /V "" <file-name>
<any-command> | find /N /V ""

これ以外の、catの -v オプションなどの整形を行うオプションを扱うコマンドはありません。

[Windows NT系] 「( )」「&」を組み合わせることで複数の出力を1つの出力にまとめることができます。これを上述のFindと組み合わせれば、1つにまとめた出力に対して行番号を付加することができます。

(<any-command1> & <any-command2>) | find /N /V ""

※ ファイルの中身を結合しつつ行番号を付加して出力したい場合は、このコマンドラインの <any-command> にTypeコマンドを利用します。

chgrp

[Windows NT系] 所有者を変更するにはIcaclsコマンドまたはTakeownコマンドを利用します(書式は大きく異なります)。

※ NTFSファイルシステムでは単一のユーザーもグループもほぼ同等のユーザー単位として扱います。

chmod

[Windows NT系] アクセス権を変更するにはIcaclsコマンドを利用します(書式は大きく異なります)。

chown

[Windows NT系] 所有者を変更するにはIcaclsコマンドまたはTakeownコマンドを利用します(書式は大きく異なります)。

cp

単純なコピーであればCopyコマンド、ディレクトリ単位のコピーや「更新されたファイルのみのコピー」を行うのであればXcopyコマンドなどを使います。また、Xcopyコマンドはシンボリックリンクに関する制御オプションも利用できます。

date

日付の表示・変更はDateコマンド、時刻の表示・変更はTimeコマンドを使用します。

[Windows NT系][拡張構文] コマンドの一部として日付や時刻の値を利用したい場合は特殊な環境変数「DATE」「TIME」が使用できます。ただし、Unix系のdateコマンドにあるような日付・時刻を特定のフォーマットで出力する方法はないため、「%」文字による環境変数の展開を工夫する必要があります。

dd

対応するコマンドはMS-DOSプロンプト/コマンドプロンプトにありません。

[Windows NT系] 指定サイズの空ファイルを作成するには、Fsutilの「file createnew」コマンドが使用できます。

df

対応するコマンドとほぼ同等のコマンドはMS-DOSプロンプト/コマンドプロンプトにありません。ただし、Dirコマンドを利用すると現在のドライブまたは指定したパスのドライブの空き容量を表示することができます。

[MS-DOS, Windows 95/98/Me] Fdiskユーティリティーを /status オプションを指定して実行すると、システムが認識するパーティション・領域情報を画面に出力します。

dmesg

対応するコマンドはMS-DOSプロンプト/コマンドプロンプトにありません。

echo

EchoコマンドがMS-DOSプロンプト/コマンドプロンプトに存在します。ただしUnix系のechoコマンドにある「-n」「-e」オプションに対応するものは存在せず、「" "」で括った文字列もMS-DOSプロンプト/コマンドプロンプトでは " " ごと出力されます。

[Windows NT系][拡張構文] Setコマンドの /P オプションとNULを組み合わせると、末尾に改行が入らない文字出力を行うことができます。(Echoコマンドページ内の注釈で説明しています。)

false

対応するコマンドはMS-DOSプロンプト/コマンドプロンプトにありません。終了コードを 0 以外にしたい場合はファイルやシステムに影響を与えないコマンドで失敗を発生させることなどで代用する必要があります。

[MS-DOS, Windows 95/98/Me] Choiceコマンドを利用して終了コードを 0 以外にすることができます。以下の例では終了コードを 1 に設定します。

echo Y | choice /C:Y > NUL

[Windows NT系] 出力リダイレクト「>」の出力先変更機能を利用してエラーメッセージ(標準エラー出力)を消すことで、画面出力なしに終了コードを 0 以外にすることができます。以下の例ではFindコマンドを用いて終了コードを 2 に設定します。

find 9:\Invalid.path 2> NUL

※ これらのコマンドラインを「false.bat」としてバッチファイル化してPATHの通る場所においておけば、falseコマンドと同じような役割を持たせることができます。

hostname

[Windows NT系] Hostnameコマンドが存在します。

kill

[Windows NT系] システム上で実行中のプログラムを(強制)終了するにはTaskkillコマンドを使用します。コマンドプロンプトの機能で他プログラムにCtrl+Cやその他イベント(Signalに近いもの)を送信することはできません。

ln

[Windows Vista以降] シンボリックリンクやハードリンクなどを作成するMklinkコマンドが存在します。ただしシンボリックリンクの作成は特殊な権限が必要です。

login

対応するコマンドはMS-DOSプロンプト/コマンドプロンプトにありません。

[Windows NT系] コマンドプロンプト内から別ユーザーでコマンドプロンプトを起動したい場合は、Runasコマンドcmd.exeを与えて実行する方法があります。

ls

出力形式は異なりますが、ファイル一覧を表示する場合はDirコマンドを利用します。

mkdir

同名のMkdirコマンド(短縮形はMd)があります。なお、Unix系のmkdirコマンドにある -p オプションと同じものはなく、複数の階層からなるディレクトリを作成する場合は1つずつ作成する必要があります。

[Windows NT系][拡張構文] 拡張機能が有効になっている場合、コマンドプロンプトのMd・Mkdirコマンドはオプション指定なしで複数の階層からなるディレクトリを一発で作成できます(Unix系のmkdirコマンドにおける -p オプションが常に指定されているような挙動となります)。

mknod

対応するコマンドはMS-DOSプロンプト/コマンドプロンプトにありません。

more

同名のMoreコマンドがありますが、構文は大きく異なります。

[Windows NT系][拡張構文] 拡張機能が有効になっている場合、またはMoreコマンドに /E オプションを指定した場合の対話モードで利用できるコマンドは、Unix系のmoreコマンドでの対話モードで利用できるコマンドに類似しています(一部異なります)。

mount

[MS-DOS, Windows 95/98/Me] 対応するコマンドはMS-DOSプロンプトにありません。パーティションに対するドライブ文字の割り当てを変える場合はFdiskユーティリティーを使用しますが、適用時にコンピューターの再起動が必要となる場合があります。

[Windows NT系] NTFSファイルシステムのディレクトリにボリュームを割り当てるにはMountvolコマンドを利用します。

mv

引数の形式は異なりますがMoveコマンドでファイルやディレクトリの移動が可能です。ただし使用しているOS・プロンプトによって異なる制約があります。

ps

[Windows NT系] 現在システムで実行中のプロセス一覧を表示するにはTasklistコマンドを使用します。

rm

ファイルの削除はDelコマンドまたはEraseコマンドを利用します。

[MS-DOS, Windows 95/98/Me] サブディレクトリとその中身を削除するにはDeltreeコマンドを利用します。

rmdir

中身が空のディレクトリを削除するには同名のRmdirコマンド(短縮形: Rd)を利用します。

[MS-DOS, Windows 95/98/Me] 中身が空でないディレクトリをまるごと削除するにはDeltreeコマンドを利用します。

[Windows NT系] Rd・Rmdirコマンドにオプションを指定すると、中身が空でない場合もディレクトリを削除することができます。

sed

対応するコマンドはMS-DOSプロンプト/コマンドプロンプトにありません。

[Windows NT系][拡張構文] Forコマンドの /F オプションで単純なテキストを解析することはできます。正規表現などを利用した複雑な解析を行う場合はPowerShellやその他スクリプト言語の利用が適しています。

sh

MS-DOSプロンプト/コマンドプロンプトの新たなセッションを開始するには直接CommandまたはCmdを実行します。また、どのようなコマンドインタープリターが来ても対応できるようにするためにCOMSPEC環境変数を利用することもできます。

stty

対応するコマンドはMS-DOSプロンプト/コマンドプロンプトにありません。ただしプロンプトの表示を変える場合、目的によってはModeコマンドが利用できる場合があります。

su

[Windows NT系] 別ユーザーで新たなセッションを開始する場合はRunasコマンドCmd.exeを実行します。

sync

対応するコマンドはMS-DOSプロンプト/コマンドプロンプトにありません。

true

対応するコマンドはMS-DOSプロンプト/コマンドプロンプトにありません。終了コードを 0 にしたい場合はファイルやシステムに影響を与えないコマンドで成功を発生させることなどで代用する必要があります。例えば、以下のようにして終了コードを 0 に設定します。

sort < NUL > NUL

※ このコマンドラインを「true.bat」としてバッチファイル化してPATHの通る場所においておけば、trueコマンドと同じような役割を持たせることができます。

umount

[MS-DOS, Windows 95/98/Me] 対応するコマンドはMS-DOSプロンプトにありません。パーティションに対するドライブ文字の割り当てを変える場合はFdiskユーティリティーを使用しますが、適用時にコンピューターの再起動が必要となる場合があります。

[Windows NT系] ボリューム割り当てを解除するにはMountvolコマンドを利用します。

uname

対応するコマンドはMS-DOSプロンプト/コマンドプロンプトにありませんが、MS-DOSやWindowsのバージョンを表示するにはVerコマンドを利用します。

[Windows NT系] コンピューターのホスト名を得るには環境変数「COMPUTERNAME」またはHostnameコマンドを利用します。

その他

$... または ${...}

「変数」と全く同じ概念はありませんが、環境変数は利用可能であり、「%」文字を利用して値を読み取り、Setコマンドで値の設定を行います。

` ` (バッククオート) または $(...)

[Windows NT系][拡張構文] Forコマンドの /F オプションと「' '」(「usebackq」指定がある場合は「` `」)を利用することで、コマンドの出力結果を解析したり環境変数にセットしたりすることができます。

basename

[Windows NT系][拡張構文] 「%~nx0」のように「%」文字の拡張構文を利用すると、フルパス名(相対パスの場合は自動でフルパス名に変換されます)からファイル名部分を取得することができます。ただし「%~nx0」のような構文は通常の環境変数に対して用いることができないため、ForコマンドCallコマンドを用いる必要があります。例えば、Forコマンドを用いる場合は以下のように記述します。

for /F "delims=" %A in ("%SOMEVAR%") do set "SOMEVAR_BASENAME=%~nxA"

Callコマンドを用いる場合は、Callでラベルにジャンプし、そのラベル内で拡張構文を利用する必要があります。拡張構文を用いる例はCallコマンドの例をご覧ください。

dirname

[Windows NT系][拡張構文] 「%~dp0」のように「%」文字の拡張構文を利用すると、フルパス名(相対パスの場合は自動でフルパス名に変換されます)からディレクトリ名部分を取得することができます。ただし「%~dp0」のような構文は通常の環境変数に対して用いることができないため、ForコマンドCallコマンドを用いる必要があります。例えば、Forコマンドを用いる場合は以下のように記述します。

for /F "delims=" %A in ("%SOMEVAR%") do set "SOMEVAR_DIRNAME=%~dpA"

Callコマンドを用いる場合は、Callでラベルにジャンプし、そのラベル内で拡張構文を利用する必要があります。拡張構文を用いる例はCallコマンドの例をご覧ください。

find

同名のFindコマンドがありますが、構文や用途は大きく異なります。CygwinやGnuWin32などのWindowsに移植されたUnix系コマンドツールをインストールしてパスを通している場合、どちらのFindコマンドが利用されるか十分に注意する必要があります。

なお、ワイルドカードを用いてファイル検索を行うだけの場合はDirコマンドが、検索して見つかったファイルに対してコマンドを実行したい場合はForコマンドが利用できます。

[Windows NT系][拡張構文] Forコマンドの拡張構文とその他コマンドを組み合わせることで、やや高度なファイル検索を行うことも可能です(Forコマンドのサンプルもご覧ください)。

sleep

[Windows Vista以降] Timeoutを用いることで一定時間の待機を行うことができます。

sort

同名のSortコマンドがありますが、構文は大きく異なります(用途は似ています)。CygwinやGnuWin32などのWindowsに移植されたUnix系コマンドツールをインストールしてパスを通している場合、どちらのSortコマンドが利用されるか十分に注意する必要があります。

which

[Windows Vista?以降] Whereが類似したコマンドになりますが、パターンに一致するファイルが複数ある場合常にすべてが出力されるため、Forコマンドの拡張構文などで取得する場合は注意が必要です。

[拡張構文] それ以外に、検索したいファイルがバッチファイルやCallによるサブルーチンの引数に含まれる場合は、%~$ENV:1の構文で取得する方法もあります。