• ベストアンサー

サブディレクトリからファイルやディレクトリを上の階層へ移動する.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は削除されてもされなくとも構いません。 このような階層内容のフォルダが複数あるので 指定したディレクトリに対しこのような動作を自動的に行ってくれると望ましい。 若干分かり難いかもしれませんが、この様な動作や 又、似たような動作を指定したディレクトリに対し行ってくれるツールや方法を探しています。 ご存知の方、心当たりのある方、回答していただけると幸いです、よろしくお願いします。 以前も似たような質問をしたのですが解決に至る回答は得られませんでした。 なので再度質問させてもらいました、何卒よろしくお願い致します。

noname#86666
noname#86666

質問者が選んだベストアンサー

  • ベストアンサー
  • micari
  • ベストアンサー率85% (12/14)
回答No.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 の下のファイルがかなり多いなら、そのうちの一部だけを新しいディレクトリにコピーして、新しいディレクトリのほうで試してみればいいと思います。 ・ 「使用例」「指定場所 (カレント・ディレクトリ)」は上記のとおりです。ディレクトリ名には依存しませんので「ディレクトリ名によるコマンド内容の変化」はないと思います。 どこまで詳しく説明すべきなのか、よくわかりませんので、今回の説明でもなお説明不足でしたら、不足な点をご指摘ください。

noname#86666
質問者

お礼

素晴らしいです、正直感動しました。 コマンド、バッチファイル、共に正常に動作、確認致しました。 for /d %i in (*) do for /d %n in ("%i\*") do if exist "%n\*" move "%n\*" "%i" 所々、まだこの内容について不明な点はありますが、入力、動作自体は無事成功しました。 コマンドとそのオプションについての詳細な事はまだ分からない為、 現段階ではあなたの提示した動作のみを行わせる事しか適いませんが、 この書式内容も含めコマンドプロンプトなどについては自ら調べ今後に役立てていきたいと思います。 >コマンドの使い方については Web で調べるのもよいのでしょうが、まずはヘルプを~ ありがとうございます、今後はwebだけではなくヘルプを参照するようにも心がけます。 >いきなりやってみて失敗すると困るので、D1 のバックアップをとってから試してください。 おっしゃる通りにテスト用のバックアップに対し先ず行いました。 >「使用例」「指定場所 (カレント・ディレクトリ)」は上記のとおり~ 無知なもので色々な可能性を考えていたんです、 回答者様を困惑させる内容だったかもしれませんね、申し訳ない。 コマンドプロンプトに限った事ではありませんが、 法則を決める事でPCにこの様な決まった動作を行わせる事が出来たんですね。 長年PCを使って来て自分では一通りの事は出来ると勝手に思い込んでいましたが、 今回自分の無能さを痛感しました、これから精進していきたいと思います。 ご回答心より感謝します、本当にありがとうございました。

その他の回答 (2)

  • micari
  • ベストアンサー率85% (12/14)
回答No.2

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 をバックアップしてから試してみてください。

noname#86666
質問者

お礼

ご回答ありがとうございます。 返信がとても遅くなってしまいました、、本当申し訳ない。 ええと、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)
回答No.1

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の下にさらにフォルダがある場合はエラーになります。) まあ上のようなバッチファイル書くなら、そのままコマンドプロンプトで打ち込んだほうが早いような…。

noname#86666
質問者

お礼

早速の回答ありがとうございます。 >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 ○○ のように ディレクトリ名を一つづつ手で入力し指定していく必要があるように見えます。 それでは結局手作業で移動させる事と相違ないように思うのですが、 ディレクトリを指定し、指定先のサブディレクトリ内を一気に検索し移動を行う術はないんでしょうか。 とにかく、この様な無茶苦茶な要望にもお答えいただき、ありがとうございました。 他に思い当る節や補足がある場合再度回答いただければ本当、幸いです。

関連するQ&A

  • サブディレクトリからファイルやディレクトリを上の階層へ移動する

    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は削除されても構いません。 若干分かり難いかもしれませんが、この様な動作を行ってくれる物を探しています。 ご存知の方、心当たりのある方、回答していただけると幸いです、よろしくお願いします。

  • サブディレクトリも含む特定のファイルを削除したい

    UNIX系のコマンドで教えてください カレントディレクトリとそれ以下の階層全てのサブフォルダ内にある*.jpgというファイルを削除するにはどうすればいいでしょうか? よろしくお願いします

  • Perl で ディレクトリ及びサブディレクトリの容量を取得したい

    Perlについて質問します。 Perlで特定のディレクトリ及び、サブディレクトリ全てのファイルの容量を取得する方法についてです。 opendir、readdir関数を使用し指定した階層の合計が表示できたが、それより1つ下の、サブディレクトリはファイルを読み込めませんでした。 どうすればサブディレクトリのファイルも読み込んでもらえるでしょうか。 よろしくお願いします。

  • 多数のファイルを1つ上の階層に移動

    画像を保存してあるフォルダがあるのですが、階層がとても深く整理が面倒です。 そのため、最下位層にあるファイルを1つ上の階層に移動させたいのですが、手軽に行う方法は無いでしょうか? 現在の構成としては、撮影した 年フォルダ/月フォルダ/日フォルダ/時フォルダ/分フォルダ の様なフォルダ構成です。 分フォルダの中身を時フォルダ 時フォルダの中身を日フォルダ の用に移動させたいのです。 よろしくお願いします。

  • HTMLの階層移動

    HTMLで上の階層に移動するには「../folder/sample.html」を使うのが普通だと思うのですが、あたまに「/folder/sample.html」という使い方をしているHTMLをみたことがあります。 ※folderは最上階層です。 自分のパソコンで動作確認するとディレクトリーが間違っていてうまく表示されないのですが、サーバー上だと正常に表示されました。。。 あたまに「/」をつけると”サーバー上の最上階層”という意味になるのでしょうか・・・?

  • ディレクトリの移動

    下記msdnサイトを参考にDir1フォルダをDir2フォルダへ移動させる処理を作りました。 【Visual Basic でディレクトリを移動する】 http://msdn.microsoft.com/ja-jp/library/ct88d1f1.aspx My.Computer.FileSystem.MoveDirectory("C:\Dir1", "C:\Dir2") しかし、この方法ではDir1フォルダの「中身」がDir2フォルダへ移動され、Dir1フォルダは消えてしまいました。 同名ファイルやフォルダが存在する場合などを考えて作るのがめんどくさかったのでMoveDirectoryを使いたかったのですが、思ったように動かず残念に思っていました。 しかし、同サイト(msdn)には下記内容も紹介されていました。 【Visual Basic でディレクトリの内容を移動する】 http://msdn.microsoft.com/ja-jp/library/ayce3kye.aspx これこそmoveDirectoryがマッチする案件だと思うのですが こっちの内容はなぜかfor文を使って見つかったファイルを移動させるという原始的なものでした。(どちらも更新日は2007年11月なのに。。。) ここで質問なのですが、 1.moveDirectoryの動きはバグなのでしょうか? 2.Dir1ごとディレクトリを移動させる方法として、moveDirectoryのように簡単に高機能なディレクトリ移動させる方法は無いでしょうか? 以上、よろしくお願いします。 実験環境:.NET Framework 3.5 SP1

  • サブディレクトリ名、フォルダ構造のみをテキスト出力したい

    ディレクトリ以下のサブフォルダ、 階層5階層ぐらいまでですが、それらを全て テキストに出力、もしくはテキストにコピペしたいです。 ファイルをコピーしなくて、ディレクトリをコピーしなくて、ディレクトリ「名」のみクリップボードか、TXTに記録できるものを探しています。 できればフルパスでの場合と、フルパスじゃなくフォルダ名のみをコピーできる場合、分けてできるソフトがベストです。 サブフォルダも分析してくれるというのをとにかく探しています。フォルダの「構造」には特に拘っていません、フルパスでそれは十分なんですが・・ よろしくお願いします。

  • [バッチファイル]指定ファイルをサブディレクトリを含み検索・処理する

    ■WindowsXP Pro SP3 ■ディレクトリ構造 カレント ├ディレクトリ1  ├サブディレクトリ1-1   ├対象ファイル1-1  ├サブディレクトリ1-2   ├対象ファイル1-2 ├ディレクトリ2  ├サブディレクトリ2-1 ・ ・ ・ このような状態で指定したファイルすべてを見つけ出し、1つ1つ処理を行っていくバッチファイルの書き方を教えて頂きたいです 具体的には、指定する対象ファイルというのがmpeg2ファイルで、そのmpeg2ファイルをすべてFFmpegを用いてmpeg1へ変換しinputと同一ディレクトリに出力するといった動作です 考えた流れはこんな感じなのですがどうにもうまく動作しなくて困っています ディレクトリ1 ディレクトリ1内のサブディレクトリ1-1 サブディレクトリ1-1内の対象ファイル1-1を見つける 見つかったときはFFmpegの処理をする FFmpegが処理し終わったら次の対象ファイルを探す FFmpegの記述は FFmpeg.exe -i "input_file" "output_file" のような感じなのでパスや相対指定を使えば理想通りの動作をすると思うのですが、いま一つ書き方がわかりません

  • FTPコマンドでディレクトリごとファイル移動できるコマンドはありますか?

    タイトルどおりなのですが、FTPでファイルを転送する際に、サブフォルダを含むディレクトリごとファイル転送するコマンドはありますでしょうか。 ディレクトリの中にあるすべてのファイルを移動したいのですが、サブフォルダがたくさんあるので、わざわざディレクトリの場所へ移動してmputを繰り返すのはめんどうで仕方ありません。 よろしくお願いします。

  • 階層フォルダー内の指定拡張子ファイルをサーチ

    指定フォルダー内の (内部に階層が深いサブディレクトリなど複数のディレクトリが存在)  指定拡張子のファイルをリストアップしたいのですが、便利なツール(アプリ)等あれば紹介ください。 対象フォルダー内にファイルが多数あるので肉眼でチェックして確認するのは無理があります。  

専門家に質問してみよう