• ベストアンサー

サブディレクトリ以下のファイルとフォルダを抽出

著者名フォルダの中に作品書籍名フォルダがあります。著者名フォルダにはサブフォルダのみでファイルはありません。 作品書籍名フォルダには実データファイルがあるようなディレクトリ構造になっています。作品書籍名フォルダとその中身だけ抽出したいのですがどうすればよいでしょうか? 著者名フォルダという親フォルダを廃止するイメージです。ちなみに200件ほどあります。 よろしくおねがいします。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.6

No5の訂正です。 No5だと一つの著者名フォルダだけしか対応できませんでした。 紹介したサイトと以下のサイトを参考にして https://win.just4fun.biz/?WSH/%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E5%86%85%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%A8%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E4%B8%80%E8%A6%A7%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%83%BBFiles%2C+Folders "C:\著者名フォルダの一つ上のフォルダ" は たとえば C:\nanigasika\著者名フォルダ\作品書籍名フォルダ という構造でしたら strSrcFolder = "C:\nanigasika" にしてください。 C:\nanigasikaの中にある全てのフォルダ(著者名フォルダ)のサブフォルダ(作品書籍名フォルダ)を全てコピー先フォルダにコピーします。作品書籍名フォルダの重複は考えていません。 On Error Resume Next Dim objFSO ' FileSystemObject Dim strSrcFolder ' コピー元フォルダ名 Dim strDstFolder ' コピー先フォルダ名 strSrcFolder = "C:\著者名フォルダの一つ上のフォルダ" strDstFolder = "C:\コピー先のフォルダ" Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set fld = objFSO.GetFolder(strSrcFolder) ' Get Folder Object Set fdcol = fld.SubFolders ' Get Folders Collection If Err.Number = 0 Then ' コピー先フォルダが存在しないときは作成する If objFSO.FolderExists(strDstFolder) <> True Then objFSO.CreateFolder(strDstFolder) End If For Each f in fdcol ' フォルダコピー objFSO.CopyFolder strSrcFolder & "\" & f.name & "\*" , strDstFolder, True If Err.Number = 0 Then WScript.Echo strSrcFolder & " を " & _ strDstFolder & " にコピーしました。" Else WScript.Echo "エラー: " & Err.Description End If Next Else WScript.Echo "エラー1: " & Err.Description End If Set fdcol = Nothing Set fld = Nothing Set objFSO = Nothing

piyo-maru7
質問者

お礼

素晴らしい!2/3は何故かコピーされませんでしたが、残りはうまくいきました。パスが見つかりません、というエラーがいくつも出ました。が2/3すべてにそれが出たわけでもなく(かなり少なかったです)、もう少し分析する必要があります。アルファベットと特殊文字のみで、漢字はフォルダ名とファイル名には含まれていませんが、嫌われた特殊文字があるのかもしれません。[とか(とかですね。 メッセージ内の句読点のマルが気に入られなかったのと、コピーされるたびに成功メッセージが出ることだけは修正しました。 ありがとうございました。

その他の回答 (5)

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.5

[フォルダをコピーする] http://www.whitire.com/vbs/tips0079.html 上記のサイトを参考にして strSrcFolder = "C:\T*" strDstFolder = "C:\Work" の部分を 著者名フォルダ、ピー先のフォルダともにCドライブのすぐ下にある場合(違う場合フォルダのフルパスを記載してください) strSrcFolder ="C:\著者名フォルダ\*" strDstFolder = "C:\コピー先のフォルダ" として実行してください。

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.4

[No.2お礼]ヘのコメント、 ≫ かなりの数があるんです。200件ならいいかと思って┅ さう云ふことは最初に云ふべき!

回答No.3

ファイル数は約千か。手作業ではだめだな。そうすると、フルパスをファイル名にしてしまったらどうか?例えば、 c:\aaa\bb\cccc.ddd というファイルを、 d:\まとめ\aaa_bb_ccc.ddd とコピーすれば、ディレクトリ構造をファイル名に含めるので、ファイル名の重複や上書きにはならない。 実際には、そうコピーするバッチファイルを、リダイレクション機能やエクセル等計算表ソフトウエアを使って作ることになる。

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.2

イトもカンタンです。 [作品書籍名フォルダ]をマウスでドラッグして、[著者名フォルダ]の[親フォルダ]にドロップ。 すると當該[親フォルダ]配下に、移動された[作品書籍名フォルダ](中身も元の儘!)と空になった[著者名フォルダ]が併存することになります。 必要なら、其処で[著者名フォルダ]を削除すれば好いのです。 「移動」先は[著者名フォルダ]以外のお好みのフォルダで構ひません。

piyo-maru7
質問者

お礼

いや、そうなんですけどかなりの数があるんです。200件ならいいかと思ってWinmergeソフトを使ってポチポチやりましたが面倒でした。自動だと元のフォルダ構造を完全に保持してしまうので、コピー先に書籍名フォルダだけでなく著者名フォルダもコピーされてしまいました。 それと200件程度だと思っていましたが1000件はありました。ですのでできれば自動でやってほしいのです。

回答No.1

たしかzcopyでできていたな。試すなら、 https://www.vcraft.jp/soft/zcopy.html をgather指定でやってみる。

piyo-maru7
質問者

お礼

サブフォルダの構造を全く無視してファイルだけ抜き出すので、ファイル名の重複があるとすべてを保持してくれません。残念ながらうまくいきませんでした。 ありがとうございました。

関連するQ&A

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

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

  • サブディレクトリも含めて最新のファイルを調べる

    Linux 上のあるディレクトリ配下に存在するすべてのファイルの中で(サブディレクトリ配下も含めて) 更新日時が最新のファイルを抽出したいのですが やり方をご存知であれば教えてください。 ディレクトリが一つだけ or 対象が特定できるなら ls -lrt とかで分かりますが 再帰的にすべてのサブディレクトリを対象としたいのです。 できれば1回のコマンド(ワンライナー)で実行できるとありがたいですが、 それはさすがに大変な気がしますので、 あくまでできればということで。。

  • csv内にサブフォルダー内のファイル名を抽出する方

    csvのA列にアイテム番号が記載されております。 また、とあるフォルダーにアイテム番号になった名前のサブフォルダーが複数ございます。 しかし、フォルダ内の画像ファイル名が不規則となっているので、アイテム番号とサブフォルダ名が一致したらb列以降に抽出したいのですが、どのようにしたらよろしいでしょうか?

  • サブフォルダのファイルごと「送る」ことができる手段ありますか?

    Aというフォルダのサブフォルダで A-A,A-B.A-Cというフォルダがあるとします。 その中には無数のファイルがフォルダ内にそれぞれあるとします。 Aという親フォルダを「送る」して、clipnameというソフトでサブフォルダA-A.A-B.A-Cの中の沢山のファイルの 絶対ファイル名を一気にコピーしたいんですが、 そういう感じで「送る」ができる手段はありますでしょうか? つまり、Aという親フォルダを送るしたら、サブフォルダ内のファイルを全て「送る」するというような挙動をしたいということです

  • 複数のサブフォルダー内のファイル名を抽出したい

    分かりやすく完成形のイメージをキャプチャーしたのでご覧ください。 ネットショップで商品を一括登録する際に添付画像のように J~N列に画像ファイル名を記載する必要がございます。 キャプチャー画像では一つのアイテム番号を例にしておりますが、この番号がサブフォルダー名になっており C:\Users\Owner\Downloads\通販素材\tsuhan_jp_5028_2018-02-26\setting_000002016 に保存されております。 実際に説明いたします。 アイテム番号111621のファイル名がもし111621.jpg,111621-1.jpg,111621-2.jpg であればエクセルの関数でも対応できるのですが、 000033340_0001.jpg、000033340_0002.jpg、000033340_0003.jpgのように不規則になっているので、このような場合の画像ファイル名を抽出させるにはどのようにすればよろしいでしょうか?

  • サブフォルダ内のファイルを全部移動させたい。

    VBScriptのバッチでの作成を考えています。 あるフォルダ(名をFolderとします)の中に、たくさんのサブフォルダが あって、そこにあるファイルをすべてFolderに移動させたいと 思っています。 (ファイルはjpg画像ファイルだけです。) たとえば、Folderの下に、Folder_Bというサブフォルダがあって、 更にその下にFolder_Cがあり、その中には1.jpgというファイルが あったとしたら、バッチ実行後、Folderの直下に1.jpgがあり、 (可能であれば)フォルダはすべて消えているという具合です。 ファイルの移動自体はファイルシステムオブジェクトのFile.Moveで行い、 最後にディレクトリを列挙して削除していけばいいんだろうなという ところはわかります。 しかし、フォルダをサブフォルダも含めてすべて舐めて、そこから ファイルを移動していくというロジックに悩んでいます。 アドバイスいただけないでしょうか。

  • サブディレクトリ内の参照

    サブディレクトリ内のファイル名の取得方法について教えてください。 <?php $mydir = './log'; if ( $handlerDir = @OpenDir($mydir) ) { while ( $filename = ReadDir( $handlerDir ) ) { if ( $filename != '.' && $filename != '..' ) { $kind = Substr( $filename, -3, 3 ); if ( $kind == 'gif' || $kind == 'jpg' || $kind == 'png' ) { print "{$filename} <br />\n"; } } } } CloseDir($handlerDir); ?> と記述し実行させると、logフォルダ内の画像ファイル名は取得できる のですが、サブフォルダ内のファイル名の取得ができません。 コード不足などであれば、そちらを教えていただければと思います。 最終的には「フォーム」からフォルダを指定して、全てのファイル名を 取得したいと考えています。 以上、宜しくお願い致します。

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

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

    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というファイルを削除するにはどうすればいいでしょうか? よろしくお願いします