- ベストアンサー
サブディレクトリからファイルやディレクトリを上の階層へ移動する.2
D=ディレクトリ(フォルダ) F=ファイル D1 ├ D2 │ └ F1 └ D3 └ D4 ├ F2 └ F3 先ず例えば指定したディレクトリをD1とした場合、 D2、D3、はディレクトリとみなしサブディレクトリは D2、D3、以降に保存されているディレクトリをサブディレクトリとみなします。 この場合D4がサブディレクトリにあたるという事になります。 保存されているファイル、フォルダの階層がこの様な内容だった場合、 サブディレクトリであるD4から、F2、F3を上の階層へ移動させる(D3へ移動させる)方法を探しています。 D1 ├ D2 │ └ F1 └ D3 ├ F2 ├ F3 └ D4 ↑ちなみに作業終了後はこのような状態になっていれば良い。 尚、その際D4は削除されてもされなくとも構いません。 このような階層内容のフォルダが複数あるので 指定したディレクトリに対しこのような動作を自動的に行ってくれると望ましい。 若干分かり難いかもしれませんが、この様な動作や 又、似たような動作を指定したディレクトリに対し行ってくれるツールや方法を探しています。 ご存知の方、心当たりのある方、回答していただけると幸いです、よろしくお願いします。 以前も似たような質問をしたのですが解決に至る回答は得られませんでした。 なので再度質問させてもらいました、何卒よろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ANo.2 です。説明不足だったようで、すみません。 以下は、Windows XP で、ディレクトリ構造は ANo.2 の回答欄のとおりして、説明します。 さて、使用方法ですが、まずコマンド・プロンプトを立ち上げます。 1. cd コマンドでカレント・ディレクトリを D1 にします。 2. 次のように入力します。 for /d %i in (*) do for /d %n in ("%i\*") do if exist "%n\*" move "%n\*" "%i" 以上です。 補足として、 ・ ANo.2 では、最後の %i を " " で囲うのを忘れていましたが、上記では " " を追加しています。これは D2, D3 などのディレクトリ名に空白が含まれているときは必要です。空白が含まれていないときはなくてもかまいません。 ・ バッチファイルにするときは、D1 の下に適当なバッチファイルを作ってください。 内容は以下のとおりです。 for /d %%i in (*) do ( for /d %%n in ("%%i\*") do ( if exist "%%n\*" move "%%n\*" "%%i" ) ) なお、上記には見やすくするために先頭に全角の空白が含まれていますが、半角に変更、もしくは単純に削除してください。 D6 が空なら削除したいというときには、if exist "%%n\*" move "%%n\*" "%%i" の次の行に rmdir "%%n" という一行を追加してください。D6 が D4 のように空ではないときには、エラーメッセージが出て、削除されません。 ・ コマンドの使い方については Web で調べるのもよいのでしょうが、まずはヘルプを見るのがいちばん正確です。 Windows に標準で入っているコマンドについては、コマンド・プロンプトから [コマンド名] /? と入れると、簡単なヘルプが出ます (たとえば rmdir /? など) コマンド・プロンプトから hh ntcmds.chm と入れると、詳細なヘルプを見ることができます。 なお、in と do は、for コマンドのキーワードで、コマンドではありません。同様に exist もコマンドではありません。 ・ いきなりやってみて失敗すると困るので、D1 のバックアップをとってから試してください。 D1 の下のファイルがかなり多いなら、そのうちの一部だけを新しいディレクトリにコピーして、新しいディレクトリのほうで試してみればいいと思います。 ・ 「使用例」「指定場所 (カレント・ディレクトリ)」は上記のとおりです。ディレクトリ名には依存しませんので「ディレクトリ名によるコマンド内容の変化」はないと思います。 どこまで詳しく説明すべきなのか、よくわかりませんので、今回の説明でもなお説明不足でしたら、不足な点をご指摘ください。
その他の回答 (2)
- micari
- ベストアンサー率85% (12/14)
OS とシェルが書いてありませんので、Windows XP だとします。 D1 ├ D2 │ └ F1 └ D3 ├ D4 │ ├ F2 │ ├ F3 │ └ D5 │ └ F4 └ D6 └ F5 上記のディレクトリ構造だと仮定します。移動後は下のようになるとします。 D1 ├ D2 │ └ F1 └ D3 ├ D4 │ └ D5 │ └ F4 ├ F2 ├ F3 ├ D6 └ F5 D1 がカレント・ディレクトリだとします。 for /d %i in (*) do for /d %n in ("%i\*") do if exist "%n\*" move "%n\*" %i 上記の方法でうまくいかないでしょうか。 ・ ちょっとややこしいので、バッチファイルにしたほうがいいかも。 ・ D5 は移動しません。 ・ D6 は消去しません。必要なら D6 の中身が空だと消去するようなコマンドを追加してください。 ・ D3 に F2 と同じファイル名があったり、F2 と F5 のファイル名が同じだったりすると、確認のメッセージが出ます。 ・ D1 をバックアップしてから試してみてください。
お礼
ご回答ありがとうございます。 返信がとても遅くなってしまいました、、本当申し訳ない。 ええと、OSの方も書き忘れていたようで、悪い癖です。 基本的にWindows系ならVista以外であれば一通りの物は 用意出来ましたので何を使ったものでも構いませんでした。 こちらの不備でしたね、以後抜かりのないよう気をつけます。 本題に入りますが、 for /d %i in (*) do for /d %n in ("%i\*") do if exist "%n\*" move "%n\*" %i すみません、いきなりですがこれについての使用法が少々、いまいち分かりません。 あなたの図に記された通りファイルが移動するのであればかなり理想に近い動作だと思います。 ですが、知識が乏しい為その文字列の使用例などがいまいちピンと来ません。。 んー、バッチファイルにする事も出来るという事を内容から読み取り、 恐らくコマンドプロンプトでのコマンドなのか、とも思い 現在その用語をあてにその手のwebサイトをあさりながら そのコマンドの用途や方法などについて調べている段階です。 もしよければ使用例や指定場所やディレクトリ名によるコマンド内容の変化、 など、お手数なのは重々承知していますが載せて頂けると幸いです。 当方の知識不足の為に回答内容を完全に理解する事は出来ませんでしたが、 回答心より感謝しています、ありがとうございました。
- shun0914
- ベストアンサー率44% (48/109)
Windowsで普通にD3とD4の2つのウィンドウを開いておいて、D4からD3へドラッグ&ドロップすることに問題があるのですか? コマンドプロンプトでやるのも嫌ですか? D3まで入って行ってから >cd D4 >move *.* .. というのもD4のようなフォルダ(ディレクトリ)がたくさんあって、いちいちやっていられないということなのでしょうか? └ D3 ├ D4 │ ├ F2 │ └ F3 └ D5 ├ F4 └ F5 こんなふうにD4とかD5とかがあって。もしそうならバッチファイルを書けばどうでしょう? フォルダD3に適当なテキストファイルaaa.txtを作って、その中に cd D4 move *.* .. cd .. cd D5 move *.* .. cd .. と書いて、そのファイルの拡張子をbatに変えて(aaa.batにして)ダブルクリックしてはいかがでしょうか? (ただしこの方法はF2~F5がすべて違うファイル名でないとおかしなことになってしまいますし、D4やD5の下にさらにフォルダがある場合はエラーになります。) まあ上のようなバッチファイル書くなら、そのままコマンドプロンプトで打ち込んだほうが早いような…。
お礼
早速の回答ありがとうございます。 >D4からD3へドラッグ&ドロップすることに問題があるのですか? >D4のようなフォルダ(ディレクトリ)がたくさんあって、いちいちやっていられないということなのでしょうか? おっしゃる通りです、そういう状況の階層が数多くあり、手作業では無理があるんです。 ↓改めて図で書くとこの様な雰囲気です。 D1 ├ D2 │ └ D3 │ ├ F2 │ └ F3 ├ D4 │ └ D5 │ ├ F4 │ └ F5 ├ D6 │ └ D7 │ ├ F6 │ └ F7 以下略 この場合 D3 D5 D7 が邪魔で D3 D5 D7 内にそれぞれ保存されているファイルを それぞれの上の階層である D2 D4 D6 に移動させたいんです。 コマンドプロンプトを使用した方法でもどんな方法でも分かる範囲でしたら全然構いませんが、 ただそのあなたの回答に載っているコマンドの場合、cd D4 ~ cd D5 ~ cd ○○ のように ディレクトリ名を一つづつ手で入力し指定していく必要があるように見えます。 それでは結局手作業で移動させる事と相違ないように思うのですが、 ディレクトリを指定し、指定先のサブディレクトリ内を一気に検索し移動を行う術はないんでしょうか。 とにかく、この様な無茶苦茶な要望にもお答えいただき、ありがとうございました。 他に思い当る節や補足がある場合再度回答いただければ本当、幸いです。
お礼
素晴らしいです、正直感動しました。 コマンド、バッチファイル、共に正常に動作、確認致しました。 for /d %i in (*) do for /d %n in ("%i\*") do if exist "%n\*" move "%n\*" "%i" 所々、まだこの内容について不明な点はありますが、入力、動作自体は無事成功しました。 コマンドとそのオプションについての詳細な事はまだ分からない為、 現段階ではあなたの提示した動作のみを行わせる事しか適いませんが、 この書式内容も含めコマンドプロンプトなどについては自ら調べ今後に役立てていきたいと思います。 >コマンドの使い方については Web で調べるのもよいのでしょうが、まずはヘルプを~ ありがとうございます、今後はwebだけではなくヘルプを参照するようにも心がけます。 >いきなりやってみて失敗すると困るので、D1 のバックアップをとってから試してください。 おっしゃる通りにテスト用のバックアップに対し先ず行いました。 >「使用例」「指定場所 (カレント・ディレクトリ)」は上記のとおり~ 無知なもので色々な可能性を考えていたんです、 回答者様を困惑させる内容だったかもしれませんね、申し訳ない。 コマンドプロンプトに限った事ではありませんが、 法則を決める事でPCにこの様な決まった動作を行わせる事が出来たんですね。 長年PCを使って来て自分では一通りの事は出来ると勝手に思い込んでいましたが、 今回自分の無能さを痛感しました、これから精進していきたいと思います。 ご回答心より感謝します、本当にありがとうございました。