最終修正 2015.6.10
Windows が普及する前は MS-DOS という CUI の OS が使われていた。 「ファイルのコピー、削除、名前の変更」などの操作は キーボードからコマンドを入力して行う。 「スタート」→「プログラムの検索」で cmd と入力すると、 cmd.exe が起動し、コマンドプロンプトのウィンドウが開く。 ここで MS-DOS と同等の操作ができる。 C:\Users\user-name> は現在居るフォルダを示している(以下、現在のフォルダと記す)。 良く使うコマンドは以下の通り。 ドライブ名、フォルダ(ディレクトリ)名、ファイル名は 大文字小文字を区別しない。 d: ドライブの移動 (d ドライブに移動する) dir 現在のディレクトリ(フォルダ)の内容を示す。 dir /w 同上 ファイル名のみを表示する cd abc 現在のフォルダの下位の abc という名前のフォルダに移動する cd c:\user\yabu\documents c ドライブのフォルダ \user\yabu\documents に移動する。 cd .. 階層が一つ上のフォルダに移動する。 windows では「ドキュメント」などで表されるフォルダは 「真の名前」と「表示されるときの名前」が異なる。 例えば「ドキュメント」は documents である。 エクスプローラの一番上の段のフォルダ名が表示されている部分を クリックすると、「真の名前」が表示される。 ファイルの操作に関するコマンド copy a.txt b.txt a.txt のコピーを同一ディレクトリ内に b.txt という 名前で作成する。 copy a.txt abcd 一つ階層が下にある abcd というフォルダに a.txt をコピー する。 rename a.txt b.txt a.txt の名前を b.txt に変更する。 del a.txt a.txt を削除する。 type def.txt def.txt というファイルの内容を表示する テキストファイル以外には使用しても意味がない。 type def.txt | more 同上。1 ページごとに停止する。 space キーで次のページ
拡張子が bat のテキストファイルをバッチファイルと言う。 メモ帳などで読み書きする。その中にコマンドを書く。 バッチファイルをダブルクリックすると、 ファイル中に書いたコマンドが順番に実行される。 (例) ------ a.bat の内容 ここから --------- rem コメント <--- rem で始まる行はコメント行 copy a.txt .. <--- a.txt を 1 階層上のフォルダにコピーする del b.txt <--- b.txt を削除 pause <--- 一時停止して、何らかのキーが押されるのを待つ ------------- ここまで ------------- a.bat が存在するフォルダにおいて、 上記の 2 つの命令を、コマンドプロンプトから打ったのと 同じ効果がある。 bat ファイルはメモ帳などで編集できるので、 「大量のファイルのリネーム」など手作業では難しいことを バッチファイルを使って行うことができる。
bat ファイルで if, 繰り返し などを記述するのは、 少々厄介である。bat ファイルはコマンドを順番に実行する 作業を自動化するために用いるのが良い。 より複雑なことをするには、wsh (Windows Scripting Host) を使う。 wsh は拡張子が vbs のテキストファイルである。 非常に多機能である。 なお、perl, ruby, phtyon などを使う方法もあるが、 処理系をインストールして環境変数を設定するなど、 少し敷居が高いので、ここでは述べない。 例として、コピー元フォルダ内の指定したファイルのうち、 更新したファイルのみを、コピー先フォルダに コピーするスクリプトを示す。 --------------------- ここから ------------------ ' ' フォルダ src_dir 中のファイル flist (複数)を ' フォルダ dist_dir にコピーする ' ただし、dist_dir 内に同一日付のファイルが存在するときはコピーしない。 ' dist_dir はあらかじめ作成しておく。 ' ' ファイルシステムにアクセスするためのオブジェクト set fsystem = CreateObject("Scripting.FileSystemObject") copied_fname = "" ' コピーしたファイルのリスト src_dir = "." ' コピー元フォルダ dist_dir = "D:\work\dir_1" ' コピー先フォルダ ' コピーするファイルのリスト flist = Array( "a.docx", "b.xlsx", _ "c.pptx", "d.txt", "e.jpg") ' ----- ファイルのコピーを行う ----- i_start = LBound(flist) i_end = UBound(flist) for i = i_start to i_end call ycopy(src_dir,flist(i),dist_dir,flist(i)) next ' ----- コピーを実行したファイルの名前を表示する -------- if copied_fname = "" Then MsgBox("コピーしたファイルはありません。") Else MsgBox("コピーしたファイルは以下の通りです" & vbCR & vbCR & _ copied_fname & vbCR & "終了しました。") End If '=============== 更新したファイルのみコピーする =============== ' ' コピーしたファイル名をグローバル変数 copied_fname に入れる ' dist_dir が存在しない場合は作成する ' sub ycopy(src_dir,fname,dist_dir,fname2) src_fname = src_dir + "\" + fname dist_fname = dist_dir + "\" + fname2 ' MsgBox("fname = "&fname&" src_fname = "&src_fname&" dist_fname = "&dist_fname) if fsystem.FileExists(src_fname) = False Then ' コピー元ファイルがない MsgBox("ファイル" & vbCR & vbCR & src_fname & vbCR & vbCR & _ "がありません。無視します。") exit sub else set src_file = fsystem.GetFile(src_fname) end if ' MsgBox("dist_dir = "&dist_dir) if fsystem.FolderExists(dist_dir) = False Then ' コピー先フォルダがない MsgBox("コピー先フォルダ" & vbCR & vbCR & dist_dir & vbCR & _ vbCR & "がありません。処理を中断します。") WScript.Quit end if if fsystem.FileExists(dist_fname) = True Then ' コピー先に既にファイルが ' あるとき、日付を比べる set dst_file = fsystem.GetFile(dist_fname) date1 = src_file.DateLastModified date2 = dst_file.DateLastModified diff_sec = DateDiff("s",date1,date2) if diff_sec < 0 then ' コピー元の方が新しいときコピーする src_file.copy dist_fname copied_fname = copied_fname + src_fname + vbCR end if else src_file.copy dist_fname copied_fname = copied_fname + src_fname + vbCR end if End sub ----------------------- ここまで -----------------