• ベストアンサー

ファイルの整理 バッチファイルの作成_2

NotFound404の回答

回答No.2

極力早い処理をと思いつつもこの辺が私の限界です。 ★★の所はそちらの環境に応じて変更要 Excelの標準モジュールで(main)マクロをお試しを。多分20分~一時間程度掛かります。 汚いコードですみません。 投稿用にTABインデントを全角スペースに変換しています エラーが発生した場合は エラーになった行とエラーメッセージをお知らせください。 Sub main() On Error GoTo errH Const TrgDir As String = "e:\tmp" '←★★ここを元のフォルダ名に   Dim newDir As String   Dim ofs As Object   Dim c As Range   newDir = TrgDir & "_New"      Set ofs = CreateObject("Scripting.FileSystemObject")   newDir = TrgDir & "_New"   If ofs.folderexists(TrgDir & "_New") = False Then     ofs.CreateFolder TrgDir & "_New"   End If   Call makeDir(TrgDir, TrgDir, newDir)    Dim FileDics As Object, Pathdics As Object Dim FileKey As Variant, PathKey As Variant   Set FileDics = CreateObject("Scripting.Dictionary")        Set Pathdics = CreateObject("Scripting.Dictionary")   Call makePathdics(Pathdics, TrgDir)   For Each PathKey In Pathdics.Keys    Debug.Print PathKey, Pathdics.Item(PathKey)   Next Dim Found As Boolean Dim j As Long Dim cv As String      For Each c In Sheets("sheet1").Range("A1", Range("A1").End(xlDown))    c.Select    cv = c.Value    Found = False     For Each PathKey In Pathdics.Keys       j = j + 1       DoEvents       Debug.Print c.Row, j       If cv = Pathdics.Item(PathKey) Then         ofs.copyfile PathKey, Replace(PathKey, TrgDir, newDir, compare:=vbTextCompare)         Found = True       End If     Next PathKey     If Found = False Then      c.Offset(0, 1).Value = "NotFound"     End If   Next c Call delDir(newDir)      Set ofs = Nothing beep:  beep MsgBox "おしまい" Exit Sub errH:      c.Offset(0, 1).Value = "Error" & Err.Description      Resume Next End Sub Private Sub makeDir(TrgDir As String, BaseDir As String, newDir As String)   Dim ofs As Object   Dim objDir As Object      Set ofs = CreateObject("Scripting.FileSystemObject")   Set objDir = ofs.getfolder(TrgDir)      For Each objDir In objDir.SubFolders     Debug.Print objDir.Path, TrgDir, newDir     ofs.CreateFolder Replace(objDir.Path, BaseDir, newDir, compare:=vbTextCompare)     Call makeDir(objDir.Path, BaseDir, newDir)   Next      Set objDir = Nothing: Set ofs = Nothing End Sub Private Sub delDir(ByVal newDir As String) '空のフォルダの削除   Dim ofs As Object   Dim objDirSub As Object, objDir As Object   Set ofs = CreateObject("Scripting.FileSystemObject")   Set objDir = ofs.getfolder(newDir)      For Each objDirSub In objDir.SubFolders     Debug.Print objDirSub.Path     Call delDir(objDirSub.Path)   Next      If objDir.Files.Count = 0 And objDir.SubFolders.Count = 0 Then     ofs.deletefolder objDir   End If End Sub Private Function makePathdics(ByRef Pathdics As Object, ByVal TergetFolder As String)   Dim oFile  As Object   Dim oFolder As Object   Dim oFolders As Object   Dim ofs   As Object      Set ofs = CreateObject("Scripting.FileSystemObject")      For Each oFile In ofs.getfolder(TergetFolder).Files     Pathdics.Add oFile, oFile.Name   Next   Set oFolders = ofs.getfolder(TergetFolder)   For Each oFolder In oFolders.SubFolders     Call makePathdics(Pathdics, oFolder.Path)   Next End Function

miyabi_700
質問者

お礼

すみません、すごく長く丁寧にプログラミングを書いていただき ありがとう御座います。 自分はプログラミングの知識はほぼ皆無に等しいので 自分が過去に質問した、 『ファイルの整理 バッチファイルの作成』 みたいな感じで、初心者にも優しい感じで 作るのは、やることが複雑すぎて不可能でしょうか?

関連するQ&A

  • ファイルの整理 バッチファイル作成

    フォルダ内にある5000個のファイルのうち エクセルに書かれた1000項目のファイルを取り出し違うフォルダに移したいのですが 現在一つ一つ手作業で、移動させています。 さくっと作業が終わらせれる コマンドプロントや、バッチファイルあるいはそういうことができるツールなどあれば ご教授お願いできないでしょうか? 作業としては、単純なのですが、1日つぶしてしまい、時間をもったいなく感じております。 よろしくお願い致します。

  • バッチ処理でファイル整理

    外付けHDD内にカテゴリごとにフォルダ分けされた5000個のファイルのうち エクセルに書かれた1000項目のファイルを取り出し 違う場所のフォルダに移動させ一箇所に集めたいです。(cドライブ内や、違う外付けHDDなど) 現在一つ一つ手作業で、移動させています。 さくっと作業が終わらせれる コマンドプロントや、バッチファイルあるいはそういうことができるツールなどあれば ご教授お願いできないでしょうか? 作業としては、単純そうなのですが、1日つぶしてしまい、時間をもったいなく感じております。 よろしくお願い致します。 ※補足 フォルダ名ファイル名には日本語が含まれていることもあります。 またファイル名で名前が重複しているものはありません。

  • ファイル管理、ファイルの移動について

    外付けHDD内にカテゴリごとにフォルダ分けされた5000個のファイルのうち エクセルに書かれた1000項目のファイルを取り出し 違う場所のフォルダに移動させ一箇所に集めたいです。(cドライブ内や、違う外付けHDDなど) 現在一つ一つ手作業で、移動させています。 早く作業が終わらせれる コマンドプロントや、バッチファイルあるいはそういうことができるツールなどあれば ご教授お願いできないでしょうか? 作業としては、単純そうなのですが、1日つぶしてしまい、時間をもったいなく感じております。 よろしくお願い致します。 ※補足 フォルダ名ファイル名には日本語が含まれていることもあります。 またファイル名で名前が重複しているものはありません。

  • バッチファイルの作成

    お世話になっております。 バッチファイルの作成方法について、只今勉強中です。 現在、毎日行われている作業をバッチファイルで自動化が出来ないか検討しておりますが、バッチファイルの編集に苦戦していて困っております・・・ ---実行したい事--- 0.以下、作業の流れをコマンドプロンプト上で表示する。 1.C:\ツール\batというフォルダに移動する。 2.batフォルダに新しく「file」というフォルダを作成 3.batフォルダ内には「bat_YYYY/MM/DD.txt」という日付のテキストがあり、該当する日付のテキストをコピーしてfileフォルダへ貼り付ける。 4.fileフォルダへ移動する。 ---終了--- 手順を全部書いてしまっているのですが、途中まではバッチファイルの編集をする事が出来ました。しかし、正解しているか不安です。 ご教授の程、宜しく御願い致します。

  • バッチ処理でファイルのコピー

    外付けHDD内にカテゴリごとにフォルダ分けされた5000個のファイルのうち エクセルのa列にあらかじめ記載された1000項目のファイル名と同じファイルを取り出し 違う場所のフォルダにコピーさせ一箇所に集めたいです。(cドライブ内や、違う外付けHDDなど) 現在一つ一つ手作業で、コピーさせています。 早く作業が終わらせれる バッチ処理やコマンドプロントの処理があれば、ご教授お願いできないでしょうか? 作業としては、単純そうなのですが、1日つぶしてしまい、時間をもったいなく感じております。 よろしくお願い致します。 ※補足 フォルダ名サブフォルダ名ファイル名には日本語が含まれていることもあります。 またファイル名で名前が重複しているものはありません。

  • バッチファイルを作りたい。

    こんにちは いまある作業をしていて、どうにか自動化できないかと調べていたら、 バッチファイルというものがあると知りました。 バッチファイルに、ファイルをドロップすると、そのファイルの名前のフォルダが作成され、 そのフォルダの中に、B,Cの2つのフォルダ、さらにフォルダBのなかに B1、B2、B3、B4の4つのフォルダが作成される。 というバッチファイルを作りたいです。 また、一度に複数のファイルをドロップしても、動くようにしたいです。 どなたか詳しい方、教えてください。 よろしくお願いします。

  • 今時、バッチファイルは古い?

    日々あるフォルダに入ってくるファイルを、別のフォルダに手作業で移動しています。 なんか面倒になってきたので、バッチファイルでプログラムを作って移動させようかなと思いました。 そこで、ふと思ったのですが、昔の人はバッチファイルを知っているでしょうが、最近の人は知らない人も多いと思います。じゃあ、その人たちはどうやって移動してるんだ?たぶん手作業なのでしょうが、もしかしたら、バッチファイルよりもっと便利な方法があるのかと思い質問します。 バックアップソフトなんて手もあるのでしょうが、これくらいのことなら、バッチファイルのほうがはるかに実用的だと思います。

  • バッチファイルのコマンドについて

    バッチファイルのコマンドについて ウィンドウズです。 バッチファイルにて、大量のファイルの名前を以下の通りにリネームしたいです。 どのようにコマンドを組めばいいのか教えてください。 また、リネームしたファイルは1つ上のフォルダに移動させたいです。 1、ファイルの1~3文字目を削除してリネームして移動するコマンドデータ 2、ファイルの3~5文字目を削除してリネームして移動するコマンドデータ 例:『123456789』というファイル名に対して、 『456789』というファイル名にして移動するコマンドと 『126789』というファイル名にして移動するコマンドが欲しいです。 データは、名前も文字数もバラバラです。 知っている方がいたらお願いします。

  • バッチファイルが作成可能でしたら教えてください

    指定フォルダの最新のファイルを (グローバル)ホットキーを押すだけで 移動、もしくは削除したいのですがバッチファイルで可能でしたら 作り方を教えてください

  • 複数のフォルダを開くバッチファイルの作成方法

    windows上で、複数のフォルダを一斉に開くバッチファイルを 作りたいのですが、上手い方法が見つかりません。 「explorer "開きたいフォルダのパス"」 このコマンドを記述したバッチファイルを実行すると 指定したフォルダを開く事が出来ますが、 開いたフォルダを閉じるまでバッチファイルに処理が戻らない為 「explorer」コマンド以降の処理が行われません。 この現象に対する対処法、もしくはフォルダ一斉オープンが可能な 別のロジックをご提示頂けないでしょうか。 尚、「windowsのバッチファイルで実現」する事が前提です。 同様の処理が可能なフリーソフト等は必要ありませんので ご了承願います。 以上、よろしくお願い致します。