• 締切済み

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

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

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

あ、ちなみに今回の作業は「移動」なので、失敗するとHDDのなかぐちゃぐちゃに なっちゃいます。 きっちりテストしてから実行するようにしてください

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

なんか面倒だけど、このままだと同じ質問をいつまでも繰り返しそうなので ざっと書いてみました ○仕様 →エクセルにはa1から下方向にフルパスでコピーしたいファイルが羅列してある →ただし書かれているファイルは必ず存在するか不問、存在しなければ飛ばす →空白行がくるまでくりかえす →移動先のフォルダは一つ、(仮にC:\newdirとしておく) →移動先に同名のファイルがある場合は移動しない →最終的に何個移動したか表示する →エクセルを表示しないで実行することもできるが今回は一度エクセルを開いておく ○動作方法 以下ソースを、test.vbsなどの名称で保存し、ファイル名を羅列したエクセルファイルを そのvbsファイルにドラッグアンドドロップすると実行される 以下ソース 'ここから sub main() set args= wscript.arguments set oWSH =WScript.CreateObject("WScript.Shell") set fs = CreateObject("Scripting.FileSystemObject") if args.count=0 then msgbox "ファイルを落としてください。" exit sub end if set f=fs.getfile(args(0)) fb=fs.getBasename(f) ext=fs.getExtensionname(f) fp=fs.GetParentFolderName(f)+"\" if lcase(ext)<>"xls" then msgbox "エクセルファイルじゃない!" exit sub end if CONST outDir="C:\newdir\" if not fs.FolderExists(outDir) then msgbox outDir+"というフォルダは存在しない" exit sub end if set oXL = CreateObject("Excel.application") oXL.visible=true oXL.Workbooks.Open(args(0)) CONST xlDown=4 count=0 with oXL.Sheets(1) startrow=1 endrow=.cells(startrow,1).end(xlDown).row For i=startrow TO endrow count=count+filecopy(fs,.cells(i,1).value,outDir) Next end with msgbox cstr(count)+"個移動しました" end sub function filecopy(fs,f,d) flag=0 if fs.fileExists(f) then if not fs.fileExists(d+fs.getFileName(f)) then fs.MoveFile f,d flag=1 end if end if filecopy=flag end function main() 'ここまで

  • kon77
  • ベストアンサー率70% (83/117)
回答No.2

自分はプログラミングやスクリプトの知識が無いので、「FStr」という文字列置換ソフトを使った、バッチファイルの例を書かせて頂きたいと思います。 以下から「FStr」をダウンロードして、解凍します。 http://www.vector.co.jp/soft/winnt/util/se497060.html 次に、エクセルファイルから、コピーしたいファイルのリストを、純粋なテキスト形式で書き出して下さい。ファイルリストはフルパスにして下さい。例えば、以下の線内のような感じです。 ---------------------------- E:\xxx\xxx\xxx.txt E:\xxx\xxx\xxx.jpg E:\xxx\xxx\xxx.mp3 ---------------------------- 次に、メモ帳を開いて、以下の線内のテキストをコピー&ペーストします。 ---------------------------- @echo off echo "■ 設定 ■" set ファイルリストのフルパス= rem (例 C:\ファイルリスト.txt) set コピー先フォルダのフルパス= rem (例 C:\コピー先フォルダ) echo "■ 設定がされていなければ処理を停止する ■" if "%ファイルリストのフルパス%"=="" exit if "%コピー先フォルダのフルパス%"=="" exit echo "■ コピー先フォルダを作成 ■" md "%コピー先フォルダのフルパス%" echo "■ ファイルリストをコピーする ■" copy "%ファイルリストのフルパス%" "%TEMP%\コピーしたファイルリスト.txt" echo "■ ファイルリストをファイルコピー用バッチファイルに置換 ■" FStr "%TEMP%\コピーしたファイルリスト.txt" /rei "^(.+)$" "copy ""$1"" ""%コピー先フォルダのフルパス%""" > "%TEMP%\ファイルリストのファイルをコピーする.bat" echo "■ 出来たバッチファイルを実行してファイルをコピーする ■" call "%TEMP%\ファイルリストのファイルをコピーする.bat" echo "■ 一時ファイルの掃除 ■" del /q "%TEMP%\コピーしたファイルリスト.txt" del /q "%TEMP%\ファイルリストのファイルをコピーする.bat" echo "■ 完了メッセージの表示 ■" echo ■  echo ■  echo ■ コピーを完了しました。何かキーを押すと終了します。 echo ■  echo ■  pause ---------------------------- 次に、貼り付けたテキストを編集します。 「set ファイルリストのフルパス=」の後に、"コピー対象ファイルが書かれたリスト"のフルパスを書き込みます。例えば「C:\ファイルリスト.txt」等です。 「set コピー先フォルダのフルパス=」の後に、"コピー先フォルダ"のフルパスを書き込みます。例えば「C:\コピー先フォルダ」等です。 あと、パスに「"」(ダブルクォーテーション)は使わないで下さい。 編集が終わったら、適当な名前を付けて、ファイル名末尾の拡張子を「.bat」としてデスクトップ等に保存します。 保存したバッチファイルを、先程解凍したFStrのフォルダ内の、「FStr.exe」と同じ場所に移動します。 移動したバッチファイルを実行します。 するとファイルのコピーが開始され、終了すると画面が停止します。 恐らくですが、コピー先フォルダを自分のデスクトップやドキュメントフォルダ以外に設定すると、権限の関係上エラーが出る気がするので、自分のユーザーの権限外のフォルダをコピー先に指定する場合は、右クリックから管理者権限でバッチファイルを実行して下さい。 一度、ファイル数の少ないテスト用ファイルを作成し、テストを行った後で本番を行うと良いと思います。 コピー対象ファイルをフルパスにすることが難しい場合は、その旨をまた書き込んで下さい。可能な限り対応させて頂きます。

miyabi_700
質問者

お礼

ありがとう御座います。 一度試してみます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

具体的に、エクセルシートがどうなっているか どういったセルにどんな記載があってそれをどう移動したいのでしょうか? またファイル名が被った場合移動してしまうと上書きされますがそれでよいのでしょうか? >そういうことができるツール エクセル使っているならVBA(マクロ)でやるか WSH(VBS)でやってもよいかと

miyabi_700
質問者

お礼

>具体的に、エクセルシートがどうなっているか >どういったセルにどんな記載があってそれをどう移動したいのでしょうか? A列に上から順番に必要なファイル名が 並べて書いてあります。 外付けHDD内のフォルダ内に ツリーじょうに振る分けられているファイルを エクセルに記載されているファイル名にしたがって 違う外付けHDD内に一箇所にまとめて移動させたいです。 >またファイル名が被った場合移動してしまうと上書きされますが>それでよいのでしょうか? 基本的に同じファイル名は存在しないように調整しているので 上書き保存されることはなさそうです。 >エクセル使っているならVBA(マクロ)でやるか >WSH(VBS)でやってもよいかと vbaは自分は使ったことがないです。 違う質問版で質問したときにそれを使ってやればできると 書き込まれましたが、一時間ほど勉強しても良くわかりませんでした。泣

関連するQ&A