moveコマンド2017年12月02日 14:58

PC-DOS 2000、OS/2、Windowsには、ファイルを別のディレクトリーに移動す� moveコマンドがあります。同じ名称なのですが、それぞれに個性があります。

まず、PC-DOS 2000では、

A:\>move /?
ディレクトリー間でファイルを移動します。またはディレクトリー名を変更します。

ファイルを移動するには:
MOVE [/Y | /-Y] [ドライブ1:][パス1]ファイル名1[,...] [ドライブ2:][パス2]

ディレクトリー名を変更するには:
MOVE [ドライブ:][パス]ディレクトリー名1 ディレクトリー名2

  /Y        既存のファイルを置き換える場合に確認を取ります。
  /-Y       既存のファイルを置き換える場合に確認を取りません。
            /Y スイッチは環境変数 COPYCMD=/Y を使ってもセットできます。

  [ドライブ1:][パス1]ファイル名1  移動したいファイルの場所と名前を指定します。

  [ドライブ2:][パス2]         移動する先のディレクトリーを指定します。
                           一個のファイルを移動する場合,ファイル名を指定すると
                           移動時にファイル名が変更されます。

  [ドライブ:][パス]ディレクトリー名1  変更したいディレクトリーの名前を指定します。
  ディレクトリー名2                新しいディレクトリーの名前を指定します。
です。移動先に既存のファイルがある時には、確認のメッセージがでます。 実際には、
A:>dir \foo
 ドライブ A にはボリューム・ラベルがありません
 ボリューム・シリアル番号は 9BEB-2015 です
 ディレクトリーは  A:\FOO

.                   17-12-02    8:33
..                  17-12-02    8:33
FILE1    TXT           8 17-12-02    8:59
FILE2    TXT           8 17-12-02    9:00
        4 個                16 バイトのファイルがあります
                       711,680 バイトが使用可能です

A:>dir \bar
 ドライブ A にはボリューム・ラベルがありません
 ボリューム・シリアル番号は 9BEB-2015 です
 ディレクトリーは  A:\BAR

.                   17-12-02    8:33
..                  17-12-02    8:33
FILE2    TXT           8 17-12-02    8:33
        3 個                 8 バイトのファイルがあります
                       711,680 バイトが使用可能です

A:>move \foo\*.* \bar
既存のファイル a:\bar\file2.txt を置き換えますか (Yes/No/All)?n
a:\foo\file1.txt => a:\bar\file1.txt [OK]

A:>dir \foo
 ドライブ A にはボリューム・ラベルがありません
 ボリューム・シリアル番号は 9BEB-2015 です
 ディレクトリーは  A:\FOO

.                   17-12-02    8:33
..                  17-12-02    8:33
FILE2    TXT           8 17-12-02    9:06
        3 個                 8 バイトのファイルがあります
                       710,656 バイトが使用可能です

A:>dir \bar
 ドライブ A にはボリューム・ラベルがありません
 ボリューム・シリアル番号は 9BEB-2015 です
 ディレクトリーは  A:\BAR

.                   17-12-02    8:33
..                  17-12-02    8:33
FILE1    TXT           8 17-12-02    9:06
FILE2    TXT           8 17-12-02    9:00
        4 個                16 バイトのファイルがあります
                       710,656 バイトが使用可能です

の様に、FILE1.TXTだけが移動します。

OS/2では、

[A:\]move /?
MOVE コマンドを使用して、1つのサブディレクトリーから同一
ドライブの別のディレクトリーにファイルを移動します。

構文:   MOVE [drive] [path1]filename1 [path2] [filename2]

ここで:
 [drive] [path]filename1   移動するファイルを指定します。
   [path] [filename2]        新しいファイル名と場所を指定します。

[A:\]

OS/2では、ディレクトリー名の変更はRENAMEコマンドを使用します。

実際には、

[A:\]dir foo bar

 ドライブ A のボリューム・ラベルはありません。
 ボリューム・シリアル番号は 9BEB:2015
 ディレクトリーはディレクトリーは A:\foo

.                 17-12-02   8:33
..                17-12-02   8:33
FILE1    TXT        8  17-12-02   8:46
FILE2    TXT        8  17-12-02   8:33
         4 ファイル         16 バイト使用

 ディレクトリーは A:\bar

.                 17-12-02   8:33
..                17-12-02   8:33
FILE2    TXT        8  17-12-02   8:34
         3 ファイル          8 バイト使用
                                 715776 バイト空き

[A:\]move foo\*.* bar
A:\foo\FILE1.TXT
SYS1083: ファイル名が重複しているか、ファイルが見つから
ないか、またはファイルが使用中です。
        1 個のファイルを移動しました。

[A:\]dir foo bar

 ドライブ A のボリューム・ラベルはありません。
  ボリューム・シリアル番号は 9BEB:2015
   ディレクトリーは A:\foo

.                 17-12-02   8:33
..                17-12-02   8:33
FILE2    TXT        8  17-12-02   8:33
         3 ファイル          8 バイト使用

 ディレクトリーは A:\bar

.                 17-12-02   8:33
..                17-12-02   8:33
FILE2    TXT        8  17-12-02   8:34
FILE1    TXT        8  17-12-02   8:46
         4 ファイル         16 バイト使用
                                 715776 バイト空き

と移動先に同じファイル名のファイルがある場合はエラーになり、 ファイルは移動できません。

Windowsでさらに様子が違います。

move /?
ファイルを移動およびファイルとディレクトリ名を変更します。

複数のファイルを移動するには:
MOVE [/Y | /-Y] [ドライブ:][パス]ファイル名1[,...] 受け側

ディレクトリ名を変更するには:
MOVE [/Y | /-Y] [ドライブ:][パス]ディレクトリ名1 ディレクトリ名2

  [ドライブ:][パス]ファイル名1
                          移動するファイルの場所と名前を指定します。
  受け側                  ファイルの新しい場所を指定します。移動先はドライブ
                          文字とコロン、ディレクトリ名、または組み合わせから成
                          ります。1 つのファイルだけを移動する場合で、その
                          ファイルを移動するときに名前を変更する場合、
                          ファイル名を指定できます。
  [ドライブ:][パス]ディレクトリ名1
                          変更するディレクトリ名を指定します。
  ディレクトリ名2         新しいディレクトリ名を指定します。
  /Y                      移動先の既存のファイルを上書きする前に確認の
                          メッセージを表示しません。
  /-Y                     移動先の既存のファイルを上書きする前に確認の
                          メッセージを表示します。

環境変数 COPYCMD にスイッチ /Y を設定できます。これは、コマンド ラインの /-Y
で無効になります。既定では、MOVE コマンドがバッチ スクリプトから実行され
ていない場合、上書きを確認します。

コマンドラインから直接使う場合とバッチファイルで使用するでは、 動作が違ってきます。

実際には、

A:\>dir \foo \bar
 ドライブ A のボリューム ラベルがありません。
 ボリューム シリアル番号は 9BEB-2015 です

 A:\foo のディレクトリ

2017/12/02  08:33              .
2017/12/02  08:33              ..
2017/12/02  09:06                 8 FILE2.TXT
2017/12/02  09:16                 8 FILE1.TXT
               2 個のファイル                  16 バイト

 A:\bar のディレクトリ

2017/12/02  08:33              .
2017/12/02  08:33              ..
2017/12/02  09:00                 8 FILE2.TXT
               1 個のファイル                   8 バイト
               2 個のディレクトリ         709,632 バイトの空き領域

A:\>move \foo\*.* \bar
A:\bar\FILE2.TXT を上書きしますか? (Yes/No/All):n
A:\foo\FILE1.TXT
        1 個のファイルを移動しました。

A:\>dir \foo \bar
 ドライブ A のボリューム ラベルがありません。
 ボリューム シリアル番号は 9BEB-2015 です

 A:\foo のディレクトリ

2017/12/02  08:33              .
2017/12/02  08:33              ..
2017/12/02  09:06                 8 FILE2.TXT
2017/12/02  09:16                 8 FILE1.TXT
               2 個のファイル                  16 バイト

 A:\bar のディレクトリ

2017/12/02  08:33              .
2017/12/02  08:33              ..
2017/12/02  09:00                 8 FILE2.TXT
               1 個のファイル                   8 バイト
               2 個のディレクトリ         709,632 バイトの空き領域

A:\type movefile.bat
move \foo\*.* \bar

A:\>movefile
A:\>move \foo\*.* \bar
A:\foo\FILE2.TXT
A:\foo\FILE1.TXT
        2 個のファイルを移動しました。
と、コマンドラインから使用した場合とバッチファイル内で使用した場合では動作が 異なっているのが確認できました。

さて、この三者、同じ名前のコマンドでも違いがあり要注意です。