- ベストアンサー
Windowsで指定「以外」のファイルを移動したい
Dドライブ ├MyDocuments ├Userdata ├ファイルA ├ファイルB └ファイルC このようなフォルダ構成のドライブがあります。 このドライブ直下に「Dドライブのデータ」というフォルダを作成し その中にMyDocumentsとUserdataを除いた全てのファイルを「移動」したいと考えています。 対象の端末数が多いので、バッチか何かで自動化したいと考えているのですが 何か良い方法はありませんでしょうか? ・MOVEコマンドは除外の指定が出来ないので使えません。 ・XCOPY+DELは、ドライブの空き容量(D以外も含む)の関係で出来ません。 ・ユーザーによってファイルAがファイル1だったり、ファイルFまであったりするので 一つずつMOVEを書いたバッチを作るというのも難しいです。 コマンドプロンプト以外をよく知らないのですが、他の方法でも構いません。 よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
WSHを使った方が楽ですがバッチで作るとこんな感じですかね… @ECHO OFF ' 移動元ディレクトリ SET SRC_DIR=D: ' 移動先ディレクトリの名前 SET DEST_DIR_NAME=Dドライブのデータ ' 移動先のディレクトリのフルパス SET DEST_DIR=D:\%DEST_DIR_NAME% REM ファイルを移動する FOR %%f IN ("%SRC_DIR%\*") DO MOVE "%%f" "%DEST_DIR%" REM ディレクトリを移動する FOR /D %%d IN ("%SRC_DIR%\*") DO ( REM 除外するディレクトリか調べるサブルーチンを調べる REM %%~ndは%%dのファイル名(ディレクトリ名) CALL :IS_EXCLUDE_DIR "%%~nd" REM 終了コードが1以上の場合はディレクトリを移動する IF NOT ERRORLEVEL 1 MOVE "%%d" "%DEST_DIR%" ) EXIT /B REM 除外するディレクトリか調べるサブルーチン :IS_EXCLUDE_DIR SETLOCAL FOR %%e IN ("My Documents" "Userdata" "%DEST_DIR_NAME%") DO ( REM 除外するディレクトリの場合、終了コードに1を返す IF /I %%e EQU %1 EXIT /B 1 ) ) ENDLOCAL EXIT /B 0
その他の回答 (4)
- iriyak
- ベストアンサー率48% (40/82)
こんにちは。 ANo.3 で紹介された UWSC でのプログラム例です。 (使用法) ・スクリプトを保存しておきます ・エクスプローラウインドウを開いて D:\ を開いておきます ・スクリプトを起動します (コメント) ★1 途中経過を都度表示しながらする場合 true を設定します ★2 エクスプローラウインドウのタイトルの一部もしくは全部を設定します (D:\ 直下ならこのままでOK) ★3 サンプルはコピー&ペーストですが、カット&ペーストする場合は VK_C → VK_X に変更します (スクリプト) const _debug = false // ★1 false → true (ダイアログ表示) public wid confirm("開始します...") wid = GETID("ボリューム (D:)", "CabinetWClass") // ★2 "ウインドウのタイトル" confirm("フォルダを作成します...") SCKEY(wid, VK_ALT, VK_F, VK_W, VK_F) SLEEP(0.1) SCKEY(wid, VK_ENTER) SLEEP(0.1) SCKEY(wid, VK_APPS, VK_M) SLEEP(0.1) SENDSTR(wid, "Dドライブのデータ") SLEEP(0.1) SCKEY(wid, VK_ENTER) SLEEP(0.1) confirm("未選択の状態にします...") SCKEY(wid, VK_CTRL, VK_A) SLEEP(0.1) SCKEY(wid, VK_ALT, VK_E, VK_I) SLEEP(0.1) confirm("コピー対象を選択します...") KBD(VK_CTRL, DOWN) SLEEP(0.1) CLKITEM(wid, "MyDocuments", CLK_MUSMOVE, false) SLEEP(0.1) KBD(VK_CTRL, UP) SLEEP(0.1) KBD(VK_CTRL, DOWN) SLEEP(0.1) CLKITEM(wid, "Userdata", CLK_MUSMOVE, false) SLEEP(0.1) KBD(VK_CTRL, UP) SLEEP(0.1) KBD(VK_CTRL, DOWN) SLEEP(0.1) CLKITEM(wid, "Dドライブのデータ", CLK_MUSMOVE, false) SLEEP(0.1) KBD(VK_CTRL, UP) SLEEP(0.1) SCKEY(wid, VK_ALT, VK_E, VK_I) SLEEP(0.1) SCKEY(wid, VK_CTRL, VK_C) // ★3 VK_C → VK_X (移動の場合) SLEEP(0.1) confirm("コピーします...") CLKITEM(wid, "Dドライブのデータ", CLK_LEFTCLK) SLEEP(0.1) SCKEY(wid, VK_APPS, VK_P) SLEEP(0.1) confirm("終了しました (Exiting...)") procedure debugOut(s, indent = 0) if _debug then print FORMAT(" ", indent * 4) + s fend procedure confirm(s) if _debug then MSGBOX(s) fend
- celtis
- ベストアンサー率70% (2332/3291)
UWSCなどのマクロソフトで操作を記録し、それを各端末で実行させてみてはどうでしょうか? chie65536さんがおっしゃっている「選択の切り換え」を記録させれば、ファイル名が異なるような環境でも動作すると思います。 http://www.vector.co.jp/magazine/softnews/060627/n0606273.html
- chie65536
- ベストアンサー率41% (2512/6032)
もう1つ方法が。 d: cd \ md Dドライブのデータ for %f in (*.*) do move d:\%f d:\Dドライブのデータ と書いたバッチファイルを動かせば「D:\にあるファイルが全部」移動されます。 for コマンドは「フォルダは無視する」ので、MyDocumentsとUserdataは移動されません。つまり「MyDocumentsとUserdataを除いた全てのファイル」が移動されます。 なお「それ以外のフォルダ」も無視されるので、D:\は「フォルダだけ存在する状態」になります。
- chie65536
- ベストアンサー率41% (2512/6032)
エクスプローラーで手動で移動するのが一番早いと思います。 MyDocumentsをクリックし、Ctrlキーを押しながらUserdataもクリック。 MyDocumentsとUserdataの両方が選択状態になったら、「編集」「選択の切り換え」で、MyDocumentsとUserdataの「2つ以外」を選択状態にする。 あとはドラッグして移動するだけ。
お礼
手動でやるのは最終手段のつもりだったのですが「選択の切り替え」は盲点でした! 少し賢くなりました。ありがとうございます。
補足
すみません、書き間違えていました。 「Dドライブのデータ」に移動させたいのは MyDocumentsとUserdataを除いた全てのファイル「とフォルダ」でした… でもこの方法は良さげですね。 これに加えてフォルダも移動できればいいのですが…