これまでWindowsのコマンドプロンプトで利用できるコマンドについて取り上げてきた。前回と前々回は制御構文的な書き方が可能になるifとforについて紹介した。連載最後となる今回は今後Windowsコマンドについて調べていく上で役に立つ情報をまとめておこうと思う。

Linuxのシェルやコマンドとの違い

Linuxには膨大な数のコマンドがある。パッケージ管理システムからインストールすれば利用できるコマンドの数はいくらでも増やすことができるし、提供されている機能も実にさまざまだ。コマンド1つあたりの機能も豊富であることが多く、オプションによってさまざまなかたちで動作させることができる。

一方、Windowsのコマンドプロンプトで使用できるコマンドは比較的限られた数で、Linuxのようにパッケージ管理システムを通じて利用できるコマンドを増やすということはできない。追加インストールすればそれなりにコマンドを増やすことはできるものの、Linuxほど多くのコマンドを利用できるようになるということはあんまりない。

さらに、Linux系のコマンドはmanコマンドでオンラインマニュアルを表示できることが多く、使い方を調べる方法が「man コマンド名」といったように統一されている。一方、Windowsのコマンドには/hパラメータでヘルプを表示するといったのが本質的な処理で、manコマンドで表示されるような詳しいマニュアルを読むことはできない。Webブラウザでオンラインのマニュアルを読む方が情報を得ることができる。

Linuxではシェルを組むときにはbashか、dashというシェルが使われることが多い。どちらもBourne Shellと呼ばれるシェルの系列に入るソフトウェアで、利用できる基本構文が類似している。インタラクティブなシェルとしてはbashが使われることが多いが、これ以外にもzsh、tcsh、ksh、fishなどもある。ともかくシェルの選択肢が多く、場合によってはBourne Shell系以外の構文が使われることもある。

これと比べるとWindowsではコマンドプロンプトとPowerShellといった選択肢が用意されている、PowerShellの方はプログラミング的な使い方が可能だが、コマンドプロンプトの方は提供されている機能がかなり限られている。ifとforで制御構文的なこともできるにはできるが、シェルや今人気のあるプログラミング言語が提供しているような制御構文としては利用することができない。あくまでも模擬的な機能で似たようなことができるものとして利用することになる。

Linuxでシェルやシェルスクリプトを使ってきたユーザは、コマンドプロンプトに同じ機能を期待すると困惑することになる。コマンドプロンプトが提供する機能はシェルと比べるとかなり限られていると考えておいたほうがよい。また、バッチファイルも基本的にはコマンドをまとめておくためのもので、シェルスクリプトのようにプログラミング言語的な利用はあまりできないと考えておいた方が無難だ。

Windowsのコマンドを調べる方法

Windowsでコマンドを使っていくとなると、今後はどういったコマンドが存在するのかを調べていく必要があるわけだが、基本的にはWebブラウザ経由でマニュアルドキュメントを探すということになる。次のURLがWindowsコマンドのマニュアルページになっており、ここを調べていくというのが基本的なアプローチになる。

Windows Commands | Microsoft Docs


執筆段階で上記サイトには次のコマンドが掲載されている。

Windows Commandsに掲載されているコマンド
append, arp, assoc, at, atmadm, attrib, auditpol, autochk, autoconv, autofmt, bcdboot, bcdedit, bdehdcfg, bitsadmin, bootcfg, break, cacls, call, cd, certreq, certutil, change, chcp, chdir, chglogon, chgport, chgusr, chkdsk, chkntfs, choice, cipher, clip, cls, Cmd, cmdkey, cmstp, color, comp, compact, convert, copy, cprofile, cscript, date, dcgpofix, defrag, del, dfsrmig, diantz, dir, diskcomp, diskcopy, diskpart, diskperf, diskraid, diskshadow, dispdiag, Dnscmd, doskey, driverquery, echo, edit, endlocal, erase, eventcreate, eventquery, eventtriggers, Evntcmd, exit, expand, extract, fc, find, findstr, finger, flattemp, fondue, for, forfiles, format, freedisk, fsutil, ftype, fveupdate, getmac, gettype, goto, gpfixup, gpresult, gpupdate, graftabl, help, helpctr, hostname, icacls, if, inuse, ipconfig, ipxroute, irftp, jetpack, klist, ksetup, ktmutil, ktpass, label, lodctr, logman, logoff, lpq, lpr, macfile, makecab, manage-bde, mapadmin, Md, mkdir, mklink, mmc, mode, more, mount, mountvol, move, mqbkup, mqsvc, mqtgsvc, msdt, msg, msiexec, msinfo32, mstsc, nbtstat, netcfg, netsh, netstat, Net print, nfsadmin, nfsshare, nfsstat, nlbmgr, nslookup, ntbackup, ntcmdprompt, ntfrsutl, openfiles, pagefileconfig, path, pathping, pause, pbadmin, pentnt, perfmon, ping, pnpunattend, pnputil, popd, PowerShell, PowerShell_ise, print, prncnfg, prndrvr, prnjobs, prnmngr, prnport, prnqctl, prompt, pubprn, pushd, pushprinterconnections, qappsrv, qprocess, query, quser, qwinsta, rcp, rd, rdpsign, recover, reg, regini, regsvr32, relog, rem, ren, rename, repair-bde, replace, reset session, rexec, risetup, rmdir, robocopy, route_ws2008, rpcinfo, rpcping, rsh, rundll32, rwinsta, schtasks, Scwcmd, secedit, serverceipoptin, Servermanagercmd, set, setlocal, setx, sfc, shadow, shift, showmount, shutdown, sort, start, subst, sxstrace, sysocmgr, systeminfo, takeown, tapicfg, taskkill, tasklist, tcmsetup, telnet, tftp, time, timeout, title, tlntadmn, tpmvscmgr, tracerpt, tracert, tree, tscon, tsdiscon, tsecimp, tskill, tsprof, type, typeperf, tzutil, vssadmin, unlodctr, ver, verifier, verify, vol, waitfor, wbadmin, wdsutil, wecutil, wevtutil, where, whoami, winnt, winnt32, winpop, winrs, wmic, wscript, xcopy

使うこともあるかと思うので、次のマニュアルへのリンクを含めた状態のコマンド一覧を掲載しておく。


一つ気をつける必要があるのは、すべてのコマンドがすべてのWindowsプラットフォームに用意されているわけではないということだ。サーバ向けの機能はサーバプラットフォームにしか用意されていないし、いくつかのコマンドはバージョンが変わると提供されていなかったり、または、提供が廃止されたりするものなどもあるので、頭に入れておきたい。

Windowsとコマンド、そのさきはPowerShell Coreへ

WindowsであってもLinuxのようにコマンドでさまざまな処理を実行することができる。コマンド化したりバッチファイル化することは処理の自動化の第一歩なので、ぜひ多くの方に取り組んでもらい、時短につなげてもらうとよいだろう。

コマンドを使ってWindowsを操作することに興味が生まれたら、次はぜひPowerShellに取り組んでほしい。PowerShellはシェルとして利用することを想定してUI/UXが設計されているが、背後にあるのはオブジェクト指向のプログラミング言語で、シェル的な使い方をしつつ、結構本格的なプログラミングも可能となっている。MicrosoftはPowerShellを使ってWindowsを操作できるようにさまざまな機能を提供しており、今後新たに学んでいくならPowerShellが便利だ。

さらに加えると、「今」から学ぶならPowerShellではなく「PowerShell Core」の方を学んで貰えればと思う。MicrosoftはPowerShellのコードの整理してPowerShell Coreというオープンソースソフトウェアとして公開した。PowerShell CoreはWindowsのみならずmacOSやLinuxでも使用できる。複数のオペレーティングシステムを管理できるシェルとしてPowerShell Coreはとても魅力的だ。

PowerShell Coreに関しては「【連載】PowerShell Core入門 - 基本コマンドの使い方」でPowerShell Coreの基本から最新版の機能の紹介まで幅広く扱っている。興味を持った方はぜひご購読いただければと思う。

WindowsはGUIで操作するものという発想しかなかった方に、ちょっとでもコマンドの便利が伝わったのなら幸いだ。これからもぜひコマンドを活用してもらえればと思う。

参考資料