ファイル振り分け整理ソフトmovefilesについて質問をお願いします。

ファイル振り分け整理ソフトmovefilesを使って、納品された 1.jpg、2.jpg…の複数データを、1.jpg→フォルダ1の中のimgフォルダ、2.jpg→フォルダ2の中のimgフォルダに振り分けたいのです。
(同じ数字の画像を同じ数字のフォルダの中のimgフォルダに振り分けたい)
実際の数字は25826、18742等のアトランダムで納品されてくるので、、
movefilesのexcelで指定すれば(数字を入力してやれば)振り分けられますが、それなら手作業で振り分けるの労力は同じなのです。
同じ数字を認識して、振り分けるようには出来ないものでしょうか?
またそれが出来るソフトを知っているかたがいれば教えて頂けますでしょうか?
宜しくお願い致します。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/02/13 19:36:59
  • 終了:2012/02/14 22:49:27

ベストアンサー

id:tdoi No.1

tdoi回答回数174ベストアンサー獲得回数752012/02/13 20:36:34

バッチファイルで十分ではないかと。
あるディレクトリにJPGファイルがいくつもあって、それをそのディレクトリ以下の数字ディレクトリに配置したいのであれば、次のようなバッチファイルで実行できます。

for %%F in (*.jpg) do mkdir %%~nF; %%~nF\img
for %%F in (*.jpg) do move %%F %%~nF\img\%%F

このバッチファイルをmovefiles.batとでも名前をつけて同じディレクトリに保存して実行すれば期待する動作になるかと。既にディレクトリが存在していることが保証されているなら、1行目は消してください。

コマンドプロンプトで操作するならば、こんな感じです。色々出てますが、状況説明と出力がほとんで、「movefile.bat」と入力するだけです。
もちろん、エクスプローラから実行しても大丈夫です。

C:\・・・>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は XXXX-XXXX です

 C:\・・・ のディレクトリ

2012/02/13  20:28    <DIR>          .
2012/02/13  20:28    <DIR>          ..
2012/02/13  20:28                 0 1.jpg
2012/02/13  20:28                 0 100.jpg
2012/02/13  20:28                 0 2.jpg
2012/02/13  20:28                 0 3.jpg
2012/02/13  20:28                 0 5.jpg
2012/02/13  20:25                92 movefile.bat
               6 個のファイル                  92 バイト
               2 個のディレクトリ  92,884,684,800 バイトの空き領域

C:\・・・>movefile.bat

C:\・・・>for %F in (*.jpg) do mkdir %~nF; %~nF\img

C:\・・・>mkdir 1; 1\img

C:\・・・>mkdir 100; 100\img

C:\・・・>mkdir 2; 2\img

C:\・・・>mkdir 3; 3\img

C:\・・・>mkdir 5; 5\img

C:\・・・>for %F in (*.jpg) do move %F %~nF\img\%F

C:\・・・>move 1.jpg 1\img\1.jpg
        1 個のファイルを移動しました。

C:\・・・>move 100.jpg 100\img\100.jpg
        1 個のファイルを移動しました。

C:\・・・>move 2.jpg 2\img\2.jpg
        1 個のファイルを移動しました。

C:\・・・>move 3.jpg 3\img\3.jpg
        1 個のファイルを移動しました。

C:\・・・>move 5.jpg 5\img\5.jpg
        1 個のファイルを移動しました。


何かの参考になれば。

他3件のコメントを見る
id:tdoi

やっつけなので、AAAの部分にsample_とかあるとうまく動きませんが、こんな感じで今回は大丈夫では?

echo off

for %%F in (*.jpg) do call :moveImage %%F
for %%F in (*-2012.html) do call:moveHTML %%F
goto :end

:moveHTML
set filename=%1%
set dir=%filename:-2012.html=%
set dir=%dir:sample_=%
if not exist %dir% mkdir %dir%
move %filename% %dir%
goto :end

:moveImage
set filename=%1%
set dir=%filename:.jpg=%
if not exist %dir% mkdir %dir%
if not exist %dir%\img mkdir %dir%\img
move %filename% %dir%\img
goto :end

:end

やってることは単純です。
大枠の動作は

for %%F in (*.jpg) do call :moveImage %%F
for %%F in (*-2012.html) do call:moveHTML %%F

です。
1つ目が、同じディレクトリの".jpg"で終わる名前のファイルに対して、moveImageというサブルーチンを実行しています。2つ目は同様に"-2012.html"で終わるファイルに対して、moveHTMLというサブルーチンを実行しています。

moveHTMLというサブルーチンは、

:moveHTML
set filename=%1%
set dir=%filename:-2012.html=%
set dir=%dir:sample_=%
if not exist %dir% mkdir %dir%
move %filename% %dir%

として記述しています。
やってることは、渡されたファイル名は%1%として参照できるので、まずは、filenameという変数に格納。その上で、変数filenameの文字列に対して、"-2012.html"という部分を""(空文字列)に置換。つまり、-2012.htmlという部分を削除して変数dirに格納しています。。
今回追記したものは、さらに、"sample_"という文字列を削除しています。

あとは、制御構造をうまく保つためにgoto :endが何箇所かに入っているって感じです。


適当にググっただけですが、

ここを読めば、バッチファイルの記述は一通り書いてある気がします。
http://sgry.jp/pgarticles/batch.html

置換処理は、こことかに一通り書いてあるかと。
http://www.atmarkit.co.jp/fwin2k/win2ktips/419batchdate/batchdate.html

2012/02/14 22:13:10
id:junemiyo

tdoiさま。
本当に詳しく説明まで頂けて感謝します。
AAAの部分は必ず数字なので、「sample_」が使われることはないので大丈夫です。
今までバッチファイルというと、フォトショップでしか使ったことがなかったので、自分で作れるなんて驚きです。
私にはハードルが高いバッチファイルを使うことができてとても感激です。
自分で自由に作れるようになったら最高ですね!…夢のまた夢…ですが(^_^;)
見ず知らずの私に時間を割いていただきありがとうございました。

2012/02/14 22:49:05

その他の回答(1件)

id:tdoi No.1

tdoi回答回数174ベストアンサー獲得回数752012/02/13 20:36:34ここでベストアンサー

バッチファイルで十分ではないかと。
あるディレクトリにJPGファイルがいくつもあって、それをそのディレクトリ以下の数字ディレクトリに配置したいのであれば、次のようなバッチファイルで実行できます。

for %%F in (*.jpg) do mkdir %%~nF; %%~nF\img
for %%F in (*.jpg) do move %%F %%~nF\img\%%F

このバッチファイルをmovefiles.batとでも名前をつけて同じディレクトリに保存して実行すれば期待する動作になるかと。既にディレクトリが存在していることが保証されているなら、1行目は消してください。

コマンドプロンプトで操作するならば、こんな感じです。色々出てますが、状況説明と出力がほとんで、「movefile.bat」と入力するだけです。
もちろん、エクスプローラから実行しても大丈夫です。

C:\・・・>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は XXXX-XXXX です

 C:\・・・ のディレクトリ

2012/02/13  20:28    <DIR>          .
2012/02/13  20:28    <DIR>          ..
2012/02/13  20:28                 0 1.jpg
2012/02/13  20:28                 0 100.jpg
2012/02/13  20:28                 0 2.jpg
2012/02/13  20:28                 0 3.jpg
2012/02/13  20:28                 0 5.jpg
2012/02/13  20:25                92 movefile.bat
               6 個のファイル                  92 バイト
               2 個のディレクトリ  92,884,684,800 バイトの空き領域

C:\・・・>movefile.bat

C:\・・・>for %F in (*.jpg) do mkdir %~nF; %~nF\img

C:\・・・>mkdir 1; 1\img

C:\・・・>mkdir 100; 100\img

C:\・・・>mkdir 2; 2\img

C:\・・・>mkdir 3; 3\img

C:\・・・>mkdir 5; 5\img

C:\・・・>for %F in (*.jpg) do move %F %~nF\img\%F

C:\・・・>move 1.jpg 1\img\1.jpg
        1 個のファイルを移動しました。

C:\・・・>move 100.jpg 100\img\100.jpg
        1 個のファイルを移動しました。

C:\・・・>move 2.jpg 2\img\2.jpg
        1 個のファイルを移動しました。

C:\・・・>move 3.jpg 3\img\3.jpg
        1 個のファイルを移動しました。

C:\・・・>move 5.jpg 5\img\5.jpg
        1 個のファイルを移動しました。


何かの参考になれば。

他3件のコメントを見る
id:tdoi

やっつけなので、AAAの部分にsample_とかあるとうまく動きませんが、こんな感じで今回は大丈夫では?

echo off

for %%F in (*.jpg) do call :moveImage %%F
for %%F in (*-2012.html) do call:moveHTML %%F
goto :end

:moveHTML
set filename=%1%
set dir=%filename:-2012.html=%
set dir=%dir:sample_=%
if not exist %dir% mkdir %dir%
move %filename% %dir%
goto :end

:moveImage
set filename=%1%
set dir=%filename:.jpg=%
if not exist %dir% mkdir %dir%
if not exist %dir%\img mkdir %dir%\img
move %filename% %dir%\img
goto :end

:end

やってることは単純です。
大枠の動作は

for %%F in (*.jpg) do call :moveImage %%F
for %%F in (*-2012.html) do call:moveHTML %%F

です。
1つ目が、同じディレクトリの".jpg"で終わる名前のファイルに対して、moveImageというサブルーチンを実行しています。2つ目は同様に"-2012.html"で終わるファイルに対して、moveHTMLというサブルーチンを実行しています。

moveHTMLというサブルーチンは、

:moveHTML
set filename=%1%
set dir=%filename:-2012.html=%
set dir=%dir:sample_=%
if not exist %dir% mkdir %dir%
move %filename% %dir%

として記述しています。
やってることは、渡されたファイル名は%1%として参照できるので、まずは、filenameという変数に格納。その上で、変数filenameの文字列に対して、"-2012.html"という部分を""(空文字列)に置換。つまり、-2012.htmlという部分を削除して変数dirに格納しています。。
今回追記したものは、さらに、"sample_"という文字列を削除しています。

あとは、制御構造をうまく保つためにgoto :endが何箇所かに入っているって感じです。


適当にググっただけですが、

ここを読めば、バッチファイルの記述は一通り書いてある気がします。
http://sgry.jp/pgarticles/batch.html

置換処理は、こことかに一通り書いてあるかと。
http://www.atmarkit.co.jp/fwin2k/win2ktips/419batchdate/batchdate.html

2012/02/14 22:13:10
id:junemiyo

tdoiさま。
本当に詳しく説明まで頂けて感謝します。
AAAの部分は必ず数字なので、「sample_」が使われることはないので大丈夫です。
今までバッチファイルというと、フォトショップでしか使ったことがなかったので、自分で作れるなんて驚きです。
私にはハードルが高いバッチファイルを使うことができてとても感激です。
自分で自由に作れるようになったら最高ですね!…夢のまた夢…ですが(^_^;)
見ず知らずの私に時間を割いていただきありがとうございました。

2012/02/14 22:49:05
id:ken3memo No.2

ken3memo回答回数242ベストアンサー獲得回数742012/02/13 23:08:04

バッチファイルのループに興味があったので、
id:tdoi さんが作成した回答no1

http://q.hatena.ne.jp/1329129414#a1131723
for %%F in (*.jpg) do mkdir %%~nF; %%~nF\img
for %%F in (*.jpg) do move %%F %%~nF\img\%%F

を使って、勝手にテストしてみました。

batループ処理テスト
D

バッチファイルの作成方法や使用方法は、、
方言じゃないけどイロイロあるので、
右クリックで作成していく やりかたが参考となれば幸いです。

id:junemiyo

画像で説明して頂いたおかげで、わたしにもよくわかりました。
このYouTubeがなかったら、私には絶対に理解不可能だったと思います。
このビデオは私のお宝です。ありがとうございました。

2012/02/14 22:55:12
  • id:junemiyo
    早々にお返事ありがとうございます。
    バッチファイルはちょっと私には難しそうです。
    少し調べてチャレンジしてみます。
  • id:junemiyo
    感動しました!!!
    お二人のご丁寧な回答で、おバカな私にもよく判りました。
    私の質問に時間を割いていただいて感激しました。
    ありがとうございます。
  • id:junemiyo
    写真をそれぞれのフォルダに振り分けることが出来ました!!
    素晴らしい驚異の速さです。すごかった。
    もう一つ私では出来ないことを教えて頂けませんか?

    上記で
    出来あがったフォルダに、さらにhtmlファイルも振り分けなくてはならないのですが。
    問題はファイル名が、フォルダ名と若干違うことです。
    AAA-2012.html → AAAフォルダ
    BBB-2012.html → BBBフォルダ 
    CCC-2012.html → CCCフォルダ 
    にいれなきゃなのです(2012は共通です)

    for %%F in (*.jpg) do move %%F %%~nF\img\%%F
    をいじってみたのですが、うまくいきません。
    もしそんなにお手間をかけないようでしたらお教えいただけないでしょうか?
    頼ってばかりで恐縮ですが、宜しくお願い致します。
  • id:tdoi
    回答欄のコメントの方に書いてみまいた。
    ちょっと長くなってしまったのと、-2012の部分とかは決め打ちにしてます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません