プロが教える店舗&オフィスのセキュリティ対策術

外付けHDD内にカテゴリごとにフォルダ分けされた5000個のファイルのうち
エクセルに書かれた1000項目のファイルを取り出し
違う場所のフォルダに移動させ一箇所に集めたいです。(cドライブ内や、違う外付けHDDなど)
現在一つ一つ手作業で、移動させています。

早く作業が終わらせれる
コマンドプロントや、バッチファイルあるいはそういうことができるツールなどあれば
ご教授お願いできないでしょうか?

作業としては、単純そうなのですが、1日つぶしてしまい、時間をもったいなく感じております。

よろしくお願い致します。

※補足

フォルダ名ファイル名には日本語が含まれていることもあります。

またファイル名で名前が重複しているものはありません。

A 回答 (4件)

あ、ちなみに今回の作業は「移動」なので、失敗するとHDDのなかぐちゃぐちゃに


なっちゃいます。
きっちりテストしてから実行するようにしてください
    • good
    • 0

なんか面倒だけど、このままだと同じ質問をいつまでも繰り返しそうなので


ざっと書いてみました

○仕様
→エクセルには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()

'ここまで
    • good
    • 0

自分はプログラミングやスクリプトの知識が無いので、「FStr」という文字列置換ソフトを使った、バッチファイルの例を書かせて頂きたいと思います。



以下から「FStr」をダウンロードして、解凍します。
http://www.vector.co.jp/soft/winnt/util/se497060 …

次に、エクセルファイルから、コピーしたいファイルのリストを、純粋なテキスト形式で書き出して下さい。ファイルリストはフルパスにして下さい。例えば、以下の線内のような感じです。

----------------------------
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」と同じ場所に移動します。

移動したバッチファイルを実行します。

するとファイルのコピーが開始され、終了すると画面が停止します。

恐らくですが、コピー先フォルダを自分のデスクトップやドキュメントフォルダ以外に設定すると、権限の関係上エラーが出る気がするので、自分のユーザーの権限外のフォルダをコピー先に指定する場合は、右クリックから管理者権限でバッチファイルを実行して下さい。

一度、ファイル数の少ないテスト用ファイルを作成し、テストを行った後で本番を行うと良いと思います。

コピー対象ファイルをフルパスにすることが難しい場合は、その旨をまた書き込んで下さい。可能な限り対応させて頂きます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/06/27 10:38

具体的に、エクセルシートがどうなっているか


どういったセルにどんな記載があってそれをどう移動したいのでしょうか?
またファイル名が被った場合移動してしまうと上書きされますがそれでよいのでしょうか?

>そういうことができるツール

エクセル使っているならVBA(マクロ)でやるか
WSH(VBS)でやってもよいかと
    • good
    • 0
この回答へのお礼

>具体的に、エクセルシートがどうなっているか
>どういったセルにどんな記載があってそれをどう移動したいのでしょうか?

A列に上から順番に必要なファイル名が
並べて書いてあります。

外付けHDD内のフォルダ内に
ツリーじょうに振る分けられているファイルを
エクセルに記載されているファイル名にしたがって
違う外付けHDD内に一箇所にまとめて移動させたいです。

>またファイル名が被った場合移動してしまうと上書きされますが>それでよいのでしょうか?

基本的に同じファイル名は存在しないように調整しているので
上書き保存されることはなさそうです。

>エクセル使っているならVBA(マクロ)でやるか
>WSH(VBS)でやってもよいかと

vbaは自分は使ったことがないです。
違う質問版で質問したときにそれを使ってやればできると
書き込まれましたが、一時間ほど勉強しても良くわかりませんでした。泣

お礼日時:2014/06/25 13:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!