こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

複雑なファイル操作

例えば沢山のフォルダが入ったドライブDから、”画像ファイル(jpgと仮定)以外のファイル及びフォルダを含まないフォルダ(中に画像ファイルしか含んでいないフォルダ)”を探査して条件に一致する全てのフォルダ(イメージファイルしか入っていないフォルダ)を(D\picturefolder)へ移動”という処理をする場合、何を使うのがよいでしょうか?つまり、これが可能なソフトであるとかバッチ処理であるとかプログラミングであるとかを教えて欲しいです

ちなみにプログラミングはPHPだけは独学である程度出来るのですが、コマンドラインでの再帰処理で実現しようと思ったのですが上手くいきませんでした。あとPHPの再帰処理は100回が限度なのでフォルダ数うが多くなるとPHPでは手におえません

投稿日時 - 2012-01-13 14:05:51

QNo.7241954

困ってます

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

バッチファイルでサンプルを作ってみました。
Dドライブルートからファイル名に .jpg が含まれるファイルだけがあるフォルダを moveコマンドで D:\picturefolder へ移動するものです。後ろから2行目内で echo move としているので表示状況をみて希望に添っているようなら
echo move → move
に変更して試してみてください。(間違うとディレクトリがぐちゃぐちゃになる可能性があるので)

No.2にさんが指摘されている隠しファイル、システムファイル等は考慮していません。dir /b で表示されるファイル名から.jpgの文字列の有無で判断しています。
また、ドライブDを網羅して調べる都合上、一度実行したあと再度実行すると、D:\picturefolderを検索してしまうので注意が必要です。色々なフォルダからD:\picturefolderに移動させるため、同じフォルダ名がいろいろな階層にあると上書き確認のメッセージが出てきます。

echo off
pushd D:\
for /f "delims=" %%d in ('dir /b /s /a:d') do call :sub "%%d"
exit /b

:sub
for /f "delims=" %%x in ('dir /b %1 ^| find /c ".jpg"') do set jpg_c=%%x
for /f "delims=" %%x in ('dir /b %1 ^| find /c /v ".jpg"') do set other_c=%%x
:echo %1
:echo %jpg_c% --- %other_c%
if %jpg_c% NEQ 0 if %other_c% EQU 0 echo move %1 D:\picturefolder
goto :EOF

投稿日時 - 2012-01-17 21:35:22

お礼

すごいです!ありがとうございます!

こんな複雑な処理がcmdで出来るなんて知りませんでした

色々しらべてコードの意味もだいたい分かったので色々改変も出来るようになりました

詳しい説明ありがとうございました

投稿日時 - 2012-01-19 13:04:24

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

>画像ファイル(jpgと仮定)以外のファイル及びフォルダを含まないフォルダ(中に画像ファイルしか含んでいないフォルダ)”を探査して

たぶん、その検索をしても無意味です。

「画像ファイルしか含まれてないフォルダ」と言うのは、多分、貴方のHDDの中には無いと思います。

見た目に画像ファイルしか入っていないように見えても、フォルダ内には、desktop.ini、Thumbs.dbなどの隠しファイルや、Administrator所有の隠しシステムファイルが存在する可能性が非常に高いです。

desktop.ini、Thumbs.dbなどを無視して(無かった事にして)検索して、何とかしてくれるツールはあるかも知れませんが、流石に「Administratorなど他ユーザーのファイルが、フォルダに混在している場合」には対処できないでしょう。

ぶっちゃけ、コマンドプロンプトで

attrib c:\*.* /d /s > filelist.txt

って実行して、ハードディスク上の全ファイルのリストfilelist.txtを作成し、エディタでfilelist.txtを開いて「目で確認」するしか方法はありません。

上記コマンドは、隠しファイルもシステムファイルも含めて、Cドライブの全ファイルと全ディレクトリをリストするコマンドです。

投稿日時 - 2012-01-13 14:35:51

ANo.1

ちょっと確認したいんですが, たとえば
・フォルダfolderA の中にはフォルダfolderB と画像ファイルのみがある
・その「フォルダfolderA の中のフォルダfolderB」の中には画像ファイルがある
という場合にはどうなっていてほしいんでしょうか?

投稿日時 - 2012-01-13 14:25:26

補足

folderAには画像ファイルとフォルダファイルの両方があるので探査には引っかかりません、この場合はfolderBのみが移動されます

投稿日時 - 2012-01-13 14:52:12

あなたにオススメの質問