ターミナルを使って効率的な作業をする(windows)


とりあえず使ってみましょう(コマンドプロンプト向け)

この項目はおまけです。

コマンドプロンプトの基本

コマンドプロンプトを起動する

スタート→「ファイル名を指定して実行」→cmd→Enterキー

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:Documents and SettingsUsername>_

OSなどによって違いますが、XPだと上のように表示されています(カスタマイズされておられる方はそうであるように)。Usernameも環境によって違ってきますが、お気になさらず。_ は点滅しているカーソルだと思ってください。


cdコマンド - ディレクトリ移動

さて、この画面の見方です。慣れれば単純明快、>の前のC:Documents and SettingsUsernameは、今自分がいるフォルダの位置(これ以降はカレントディレクトリと呼びます)なのです。
この場所だと非常に使いにくいので、Dドライブあたりに移動しましょう(他の名前であれば、D:X:等と読み替えてください)。フォルダ移動には、通常CD(Change Directoryの略)コマンドが使われますので、>に続いて

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:Documents and SettingsUsername>CD D:\n
(注意:Windowsは大文字と小文字を区別しないので、cd d:やCd d:でもかまいません。)

と入力した後に、エンターキーを押してみましょう。間違えて「指定されたパスが見つかりません。」等のエラーメッセージが出ても驚かずにもう一度落ち着いて実行してください(スペースをきちんと1つ含んでますか?打ち間違いはありませんか?)。どうでしょうか?

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:Documents and SettingsUsername>CD D:\n
C:Documents and SettingsUsername>_

となってしまったはずです。この理由は簡単で、コマンドプロンプトで違ったドライブに移動するときには、以下のようにしなければならないからです。

C:Documents and SettingsUsername>CD D:\n
C:Documents and SettingsUsername>D:

D:>_

カレントディレクトリがD:に移っているのが分かります。これはWindows特有のルールでしょうか。ですが、コマンドには通常、「オプション」と呼ばれるものが存在します。なんてことはない、オプションはコマンドの便利屋です。試しに、D:に続いて、以下のように入力したとすると(以下に示した、Cドライブ直下に移動する行為は非常に危険ですから、慣れないうちは絶対にしないでください)、

D:>CD /D C:\n
C:>_

となっています。CD /D C:とすると、挙動が変わってきておもしろかったりするのですが、それは慣れたころにやってみてください。まあ、とりあえず、/Dオプションを使う事により、少しは楽になったことでしょう。

さあ、オプションが存在していることが分かったところで、このオプションがあるかどうかなんて、初めて使う人にとっては、エスパーはさておき、分からないはずです。そんな時は、コマンドの後に/?オプションをつけると、コマンドがあなたにきっちり教えてくれます(以下のヘルプは抜粋してますので、実際の表示とは違います)。

D:>CD /?
現在のディレクトリを変更したり、ディレクトリ名を変更したりします。

CD [/D] [ドライブ:][パス]
CD [..]

  ..   親ディレクトリに変更するときに指定します。

現在のディレクトリだけでなく、現在のドライブも変更するには /D オプショ
ンを使用してください。

(以下略)

とぐだぐだと表示されます。D:>が表示されるまで、a等の適当なキーを押してください。残念かな、Windowsのヘルプは専門用語が多く、コマンドプロンプトの初心者には非常に分かりにくい。親ディレクトリ(人により「一つ上の階層」とか「パーレントディレクトリ」とも呼ぶ)というのは、D:fooarに対するD:fooの事です。逆に、子ディレクトリ(同様、これも人により「一つ下の階層」とか「サブディレクトリ」とか「チャイルドディレクトリ」とも呼ぶ)というのは、D:fooに対するD:fooarの事です。親ディレクトリや子ディレクトリは後で再び扱います。ディレクトリはWindowsでは通常「フォルダ」と呼ばれますが、このようなコンソール上では、昔からの名残で、フォルダと呼ばずにディレクトリと呼ぶことになっています。
CHDIR(CHange DIRectoryの略)コマンドも存在している事が分かると思いますが、これはCDコマンドとほぼ同等の機能を持つコマンドなので、今は意識しなくてもかまいません。


mkdirとrmdirとdirコマンド - ディレクトリ操作

さて、次はフォルダの新規作成です。どうでしょう、フォルダを新規作成してそのフォルダの名前を変更し、そのフォルダを開いて……」の繰り返しは非常に冗長で長ったらしい作業だとは思いませんか?コマンドプロンプトならその心配はご無用です。カレントディレクトリがD:であることを確認し、次のコマンドを実行してみてください(以降小文字で行きますが、全て大文字でやってもらってもかまいません)。

D:>mkdir lecmoebuntufooarhoge

D:>cd lecmoebuntufooarhoge

D:lecmoebuntufooarhoge>_

これでフォルダの新規作成は終了です。きちんと名前も付いています。信用ならない?でしたら、マイコンピュータ→Dドライブ→lecmoebuntu→foo→bar→hoge の順に開ける事を確認してみてください。hogeのフォルダまで移動でき、hogeフォルダの中に何も無いことを確認できたあなたは、コマンドの実行に成功しています。
ここで使われたmkdir(MaKe DIRectoryの略)コマンドも単純なコマンドで、ただディレクトリを作成するだけです。オプションはありません。上の状態で、mkdir piyo を実行すれば、hogeフォルダの中にpiyoという名前が付いたフォルダが作成できているのが確認できるでしょう。試して見てください。
ところで、先ほどのcdコマンドのおさらいをしましょう。親ディレクトリに移る場合は cd .. を入力してください、とヘルプにあったはずですから、試して見ましょう。

D:lecmoebuntufooarhoge>cd ..

D:lecmoebuntufooar>_

すると、D:lecmoebuntufooarhogeからD:lecmoebuntufooarに移動したことが分かります。理解が速い人は、このまま cd ..ar を実行すれば元に戻ってくるのかなと勘繰るかもしれませんが、その通りです。親ディレクトリの子ディレクトリはカレントディレクトリなのです。逆にした、子ディレクトリの親ディレクトリ(cd hoge..)もまたカレントディレクトリなのです。暫し閑話休題。
ところで、ディレクトリを作成できたのですから、削除もできてまた然りです。ディレクトリ削除にはrmdir(ReMove DIRectory)コマンドを使います。このコマンドには、オプションがあります(後述)。

D:lecmoebuntufooar>cd hogepiyo

D:lecmoebuntufooarhogepiyo>mkdir fuga

D:lecmoebuntufooarhogepiyo>rmdir fuga

fugaディレクトリを作成した後に、すぐにfugaディレクトリを削除しています。
ところで、Windowsでは通常、ファイルやフォルダを削除するとゴミ箱行きになると思います。試しに、ゴミ箱を開いて、fugaフォルダを探してみましょう。元からあった場合を除いて、見つからないと思います。これでは恐ろしくて実行できない?では、以下の場合を考えて見ましょう。
まず、もう一度fugaディレクトリを作成し、移動します。

D:lecmoebuntufooarhogepiyo>mkdir fuga

D:lecmoebuntufooarhogepiyo>cd fuga

そこで、代々Windowsに標準装備されていると言っていい、メモ帳を開いてみましょう。
D:lecmoebuntufooarhogepiyofuga>notepad fizzbazz.txt

メモ帳が起動し、「新しく作成しますか?」と問われるので、はい(Y) をクリックします。そのまま何もせずにメモ帳を閉じます(注意: notepadはコマンドではないので、notepad /? を実行すると、ヘルプの代わりにエラーメッセージが出ます)。

ここで、また一つ新しいコマンドの登場です。少し遅すぎるくらいの登場でしょうか?
ディレクトリの中身を確認するコマンドとして、dirコマンドがあります。せっかくメモ帳を使い、ファイルを作成したのですから、その作成確認をしないわけには行きません。

D:lecmoebuntufooarhogepiyofuga>dir
 ボリューム シリアル番号は ***** です

 D:lecmoebuntufooarhogepiyofuga のディレクトリ

2010/12/07  18:30    <DIR>          .
2010/12/07  18:30    <DIR>          ..
2010/12/07  18:30                 0 fizzbazz.txt
               1 個のファイル                   0 バイト
               2 個のディレクトリ  ***** バイトの空き領域

D:lecmoebuntufooarhogepiyofuga>dir /B
fizzbazz.txt

D:lecmoebuntufooarhogepiyofuga>_

どうでしょう、これを見て、一度に情報をつかめるでしょうか?
左から、日時、<DIR>又は空欄、0、.やfizzbazz.txtなど の構成になっています。
日時は、ファイルやディレクトリが更新された日時を表しています。
最後の .やfizzbazz.txt はディレクトリ名やファイル名を表しています。. はカレントディレクトリを表しています。.. と似ていますね。
次に、<DIR>とあるところは、示された名前がディレクトリであることを表しています。ですから、上の2つはディレクトリであることが分かります(もっとも、カレントディレクトリと親ディレクトリな訳ですから、ディレクトリであるのは当然のことでしょうけれど)。
fizzbazz.txt の左にある 0 はファイルサイズを表しています。単位はbyte(バイト)です。今回は、メモ帳を開いて何も文章を書かなかった訳ですから、ファイルサイズはないということで、0 バイトになっています。
このdirコマンドのヘルプ(dir /?)を調べると、オプションがたくさんあって驚くかも知れませんが、2つ目に実行したように、まずはじめは /B オプションに慣れると良いでしょう。

せっかくですから、休憩ついでに、上達が速い人向けに一つコマンドを紹介しましょう。メモ帳を起動する代わりに type nul > fizz.txt を実行してみましょう。fizz.txt という名前で、空の(0 バイトの)ファイルが作成されます。typeコマンドについては追々説明しますので、とりあえずこんなコマンドもあるのか程度におさめていただく事にしましょう。

さあ、ここでrmdirコマンドの本題に戻りましょう。以下を実行してみてください。

D:lecmoebuntufooarhogepiyofuga>cd ..

D:lecmoebuntufooarhogepiyo>rmdir fuga
ディレクトリが空ではありません。

おっと、これは困りましたね。「ディレクトリが空ではありません。(=ディレクトリの中にファイルやディレクトリがありますよ)」というメッセージが出て削除できなくなっているのではありませんか!
ちょっとここで思い出してください。ちょっと前にrmdirコマンドを使った時は問題無く削除できていたはずです。理由は書くまでもなく、エラーメッセージが言うとおりなのです。ディレクトリが空でないときには、削除できなくなっているのです。これは間違って削除するのを防ぐためにできています(空のディレクトリを誤って削除した際はmkdirで作成すれば簡単に元に戻せるわけですから、さほど問題ではない)。ここでまたオプションの登場です。

D:lecmoebuntufooarhogepiyo>rmdir /S fuga
fuga、よろしいですか (Y/N)? Y

D:lecmoebuntufooarhogepiyo>_

どうでしょう、少しカタコトな日本語で尋ねてきています。「fugaを削除してもよろしいですか (Y/N)?」と尋ねているのです。文末の(Y/N)というのは、yかnで答えなさいよ、ということです。yを入力してエンターを押せば、Yesの解釈で削除され、nであればNoの解釈で削除されずにそのままといった具合でしょうか。
ちなみに、以下の削除の方法もありますが、慣れないうちはお勧めしません。ゴミ箱に移動されずに削除されるからです。紹介だけしておきます。

D:lecmoebuntufooarhogepiyo>rmdir /S /Q fuga

D:lecmoebuntufooarhogepiyo>_

/Qオプションを伴うことで、確認のメッセージを出さずに削除できます。もう一度になりますが、慣れないうちは/Qオプションは使わないでください。


コマンドの引数

ここで、もう一つ覚えていただきたい事があります。
拡張子が exe であるバイナリやコマンドには引数(ひきすう)というものがつきものですが、これも難しくは無い、今までにあなたも引数をちゃんと使ってます。例えば、mkdir fuga というコマンドの第1引数は fuga になりますし、rmdir /S fuga の第1引数は /S 、第2引数は fuga になりますし、notepad fizzbazz.txt の第0引数は notepad になります。スペースで区切って何個目の引数か数えるだけで良いのです(0から数える性質上、混乱する方もおられるようですが)。


echo、typeコマンド - ファイルの新規作成・内容表示、リダイレクト

タイトルからして難しく見えるかも知れませんが、実はそんなことはありません。
とりあえずどんなものか、やってみましょう(echoに与える引数は何でも良いはずです)。

D:lecmoebuntufooarhogepiyofuga>echo a b cde f gh ij /D
a b cde f gh ij /D

D:lecmoebuntufooarhogepiyofuga>_

まずはecho(「エコー」と読む)コマンドです。オプションはありません。
これも難しくは無く、第1引数以降が与えられていれば、第1引数以降の引数をそのまま全て表示するだけのものです。この出力を、テキストファイルの中に収めたい時があるかも知れません。このときにリダイレクトというものを使います。リダイレクトは、コマンドとしてあるわけではなく、> という記号を使うだけで実現できます(ヒント: 過去に入力した同じコマンドは、キーボードの↑や↓を押すと入力する手間が省けます)。

D:lecmoebuntufooarhogepiyofuga>echo a b cde f gh ij /D > fizz.txt

D:lecmoebuntufooarhogepiyofuga>type fizz.txt
a b cde f gh ij /D

D:lecmoebuntufooarhogepiyofuga>_

typeコマンドは、ファイルの内容を表示するコマンドで、オプションはありません。
echoコマンドにより、a b cde f gh ij /Dが出力されようとしています。ですが、続けてリダイレクトされているので、出力先が画面ではなく、fizz.txt という新規ファイルになっているのです。なので結果として、a b cde f gh ij /D の内容を持つ fizz.txt が作成されます(作成後に、試しにメモ帳で開いてみてもいいでしょう(notepad fizz.txt))。もう一度、上を参考にして、echoコマンドに違った引数を持たせ、同じようにリダイレクトし、typeコマンドでfizz.txtの内容表示をしてみましょう。ファイルの内容が書き換わっているでしょうか?
実は、リダイレクトには、上書きと、ファイルの末端に追記する、2つの方法があります。
> を1つにした場合は上書きです。それは先ほどあなたが確認したことと同じ事です。 >> のように > を2つにした場合は追記です。

D:lecmoebuntufooarhogepiyofuga>echo sdafadsf >> buzz.txt

D:lecmoebuntufooarhogepiyofuga>dir >> buzz.txt

上のコマンドを実行した後、buzz.txtの内容を表示してみてください。dirコマンドの内容もリダイレクトを利用してファイルに追記できていることが分かるはずです。リダイレクトは、echoコマンドやdirコマンドだけではなく、rmdir /? の内容等もリダイレクトしてファイルに収める事ができます。


move、copy、xcopy、delコマンド - 名前やファイルの操作

ファイルやディレクトリの移動・コピー・ファイル名変更ももちろんコマンドプロンプトでできます。これらは非常に簡単です。ここら辺のコマンドが持つ煩わしいオプションはひとまずおいておくとして、基本的な使い方を書いておきます。
まずはファイル名の変更をして見ましょう。以下のコマンドを実行してみてください。

D:lecmoebuntufooarhogepiyofuga>dir /B
buzz.txt
fizz.txt

D:lecmoebuntufooarhogepiyofuga>move buzz.txt hogera.txt

D:lecmoebuntufooarhogepiyofuga>dir /B
fizz.txt
hogera.txt

第1引数にファイル名を変更したいファイル、第2引数に変更したいファイル名を書きます。上の例では、buzz.txt を hogera.txt にファイル名の変更を行いました。ファイル名の変更はrenameコマンドでもできますが、moveコマンドに比べて使い勝手が悪いでしょう。詳しくはrenameコマンドのヘルプを参照。
次にfizz.txtを親ディレクトリに移動してみましょう。

D:lecmoebuntufooarhogepiyofuga>move fizz.txt ..

D:lecmoebuntufooarhogepiyofuga>cd ..

D:lecmoebuntufooarhogepiyo>dir /B
fizz.txt
fuga

あるファイルをただ単に他のディレクトリに移動するときは、ディレクトリ名だけを第3引数に与えれば良いので、.. となっています。ファイルを他のディレクトリに移動し、かつファイル名を変更したいときは、第3引数に ..hogehoge.txtとします。
次はディレクトリ名を変更します。ファイルの時と同じようにして使います。

D:lecmoebuntufooarhogepiyo>move fuga fugo
        1 個のファイルを移動しました。

D:lecmoebuntufooarhogepiyo>dir /B
fizz.txt
fugo

次はファイルのコピーです。

D:lecmoebuntufooarhogepiyo>copy fizz.txt fizz1.txt
        1 個のファイルをコピーしました。

D:lecmoebuntufooarhogepiyo>dir /B
fizz.txt
fizz1.txt
fugo

fizz.txtの内容をfizz1.txtにコピーしました。moveコマンドと使い方が似ている分、覚えやすいと思います。
次はディレクトリのコピーです。

D:lecmoebuntufooarhogepiyo>move fizz1.txt fugofizz.txt

D:lecmoebuntufooarhogepiyo>xcopy fugo fuga\nfugofizz.txt
fugohogera.txt
2 個のファイルをコピーしました

xcopyコマンドは、ディレクトリの階層まで保持しつつコピーします。詳細は後ほど書くとして、最後のdel(DELeteの略)コマンドも見てしまいましょう。

D:lecmoebuntufooarhogepiyofuga>dir /B
fizz.txt
hogera.txt

D:lecmoebuntufooarhogepiyofuga>del /P fizz.txt
D:lecmoebuntufooarhogepiyofugafizz.txt を削除しますか (Y/N)? Y

D:lecmoebuntufooarhogepiyofuga>del hogera.txt

D:lecmoebuntufooarhogepiyofuga>dir /B

D:lecmoebuntufooarhogepiyofuga>_

注意として、delコマンドだけは、/P オプションをつけて実行する癖をつけることをお勧めします。delを実行しただけでdel /Pを実行する方法があるのですが、ここでは扱わずに後回しにしましょう。/P オプションは、promptの略でPが使われているのでしょうが、/Pをつけないといきなり削除されてしまって後戻りできないからです。ゴミ箱に移動されないのは前に見た通りです。

これで一通り説明が終わりましたが、少し厄介な点が1つ残っているので、それを説明しなければなりません。それは、xcopyの後述としておいた、copyコマンドとxcopyコマンドの違いです。
まずは、少し長めですが、下準備として、以下を実行してください。

D:lecmoebuntufooarhogepiyofuga>cd ..fugo

D:lecmoebuntufooarhogepiyofugo>mkdir fugo1fugo2

D:lecmoebuntufooarhogepiyofugo>cd fugo1fugo2

D:lecmoebuntufooarhogepiyofugofugo1fugo2>echo f12 > textfile.txt > textfile2.txt

D:lecmoebuntufooarhogepiyofugofugo1fugo2>dir /B
textfile.txt
textfile2.txt

D:lecmoebuntufooarhogepiyofugofugo1fugo2>cd ......\n
D:lecmoebuntufooarhogepiyo>rmdir /S fuga
fuga、よろしいですか (Y/N)? Y

D:lecmoebuntufooarhogepiyo>dir /B fugo\nfizz.txt
fugo1
hogera.txt

D:lecmoebuntufooarhogepiyo>mkdir oguf

リダイレクトは複数のファイルにも対応していて、textfile.txtとtextfile2.txtは同じ中身になっています。typeコマンドで確認してみても良いでしょう。

まず最初に、copyコマンドを使い、fugoディレクトリの中身をそのままのディレクトリ構造で空のogufディレクトリにコピーしてみようとします。

D:lecmoebuntufooarhogepiyo>copy fugo oguf\nfugofizz.txt
fugohogera.txt
        2 個のファイルをコピーしました。

fugoディレクトリにあるfugo1というのは、先ほど作成したディレクトリなのですが、残念なことにogufディレクトリにはfugo1というディレクトリが存在していませず、コピーされたファイル数も4つではなく2つです。これは、copyコマンドが、ディレクトリのコピーをしないからです。このような場合はxcopyコマンドを /S のオプションと共に使います。

D:lecmoebuntufooarhogepiyo>rmdir /S oguf
oguf、よろしいですか (Y/N)? y

D:lecmoebuntufooarhogepiyo>xcopy fugo oguf /S
fugofizz.txt
fugohogera.txt
fugofugo1fugo2    extfile.txt
fugofugo1fugo2    extfile2.txt
4 個のファイルをコピーしました

今度はきちんとコピーされています。フォルダ階層も同じです。
余力があれば、ogufディレクトリをもう一度削除し、 /S オプションを除いて実行してみてください。copyコマンドと同じ動作をしたことに気付いたあなたは、これ以降、より便利なxcopyコマンドのみを使うようになるでしょう。以下の例も参考にしてみてください。

D:lecmoebuntufooarhogepiyo>xcopy fizz.txt fizzx.txt
fizzx.txt は受け側のファイル名ですか、
またはディレクトリ名ですか
(F= ファイル、D= ディレクトリ)? F
D:fizz.txt
1 個のファイルをコピーしました

D:lecmoebuntufooarhogepiyo>dir /B
fizz.txt
fizzx.txt
fugo

長くて読みにくい文章でお疲れでしょうか。これで基本的なコマンド操作は終わったはずです。
次の章では、ファイル比較や見やすいコマンドプロンプトを作るといった少しレベルの高い事をやってみようと思います。最後に一つだけ。

D:lecmoebuntufooarhogepiyo>cd D:\n
D:>rmdir /S lecmoebuntu
lecmoebuntu、よろしいですか (Y/N)? Y

を忘れずに。では。


コマンドプロンプトの応用

コマンドプロンプトの補完機能

例えば、以下のように作業を進めるとします。

D:>mkdir abcdefghijklmn

D:>cd abcdefghijklmn

D:abcdefghijklmn>

ここまでこれたあなたは、この作業に使ったコマンドの説明は不要でしょうか。一見、何の変哲もない一連の作業ですが、これには少し時間を短縮できるテクニックが含まれています。それは、Tabキーを押す、ということです。難しくはない、cdコマンドの時に、Tabキーで長いディレクトリ名やファイル名の入力をコマンドプロンプトに肩代わりしてもらうのです。<[Tab]>はTabキーを一度だけ押すことを意味します(以下、<[Ctrl]>等も同様です)。

D:>mkdir abcdefghijklmn

D:>cd abc<[Tab]>

初めて見た人にとっては驚きでしょうか。慣れれば恩恵を受けることでしょう。
cdコマンドだけではなく、rmdirコマンドの引数などを入力する時にも使えます。試してみてください。


(ここはまだ書いている途中です。)



  • 最終更新:2011-02-15 18:57:44

このWIKIを編集するにはパスワード入力が必要です

認証パスワード