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

解決済みの質問

条件分岐のバッチファイル

「D&Dした複数ファイルを、そのファイル名と同名のフォルダ(既に作成済み)の中にある、Aというフォルダに移動する。」という動作をするバッチファイルを、以前の質問などを参考にしながらわからないなりに作ってみました。

:LOOP

if %1 == "" GOTO XEND

move %1 "C:\Documents and Settings\(ユーザー名)\デスクトップ\%~n1\A"
SHIFT
GOTO LOOP

:XEND

PAUSE

これで動作したのですが、これにさらに

「ファイルの拡張子がjpgならフォルダAへ、bmpならフォルダBへ、

 pngかつファイルサイズが2MB以下ならばフォルダCへ、それ以上ならフォルダDへ移動」

という動作を追加したいです。結構複雑なのですが、これはバッチファイルで可能なのでしょうか?

長文の上、わかりにくくてすいません。

可能ならば、どなたか教えていただけないでしょうか。よろしくお願いします。

投稿日時 - 2011-05-31 17:10:49

QNo.6776990

困ってます

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

%~x1 で%1の拡張子のみ取得することが出来ます。
ただし拡張子が小文字か大文字かが不定なので、一工夫が必要です。
%ALP:a=A% とすると、環境変数ALPに含まれるaがAに変換されます。

%~z1 で%1のファイルサイズを取得することが出来ます。

条件分岐は既にお使いのif関数で出来ます。

ということで、戯れに作ってみました。

@Echo Off

Set BASE=C:\Documents and Settings\(ユーザー名)\デスクトップ
Echo 移動のベースは[%BASE%]です。
Echo.

:LOOP
If "%~1"=="" Goto ENDP

Set EXT=%~x1
If "%EXT%"=="" Goto doNothing
Set EXT=%EXT:j=J%
Set EXT=%EXT:p=P%
Set EXT=%EXT:g=G%
Set EXT=%EXT:b=B%
Set EXT=%EXT:m=M%
Set EXT=%EXT:n=N%

if %EXT%==.JPG Goto doJPG
if %EXT%==.BMP Goto doBMP
if %EXT%==.PNG Goto doPNG

REM 拡張子がいずれでもない時の動作
Set MOVED=%~n1\E
Goto doMOVE

:doNothing
REM 拡張子無し時の動作
Set MOVED=%~n1.d\F
Goto doMOVE

:doJPG
REM jpg時の動作
Set MOVED=%~n1\A
Goto doMOVE

:doBMP
REM bmp時の動作
Set MOVED=%~n1\B
Goto doMOVE

:doPNG
if %~z1 LEQ 2097152 Goto doSPNG
if %~z1 GTR 2097152 Goto doBPNG

:doSPNG
REM pngで2M以下の時の動作
Set MOVED=%~n1\C
Goto doMOVE

:doBPNG
REM pngで2Mより大きい時の動作
Set MOVED=%~n1\D
Goto doMOVE

:doMOVE
Echo [%~1]を[%MOVED%]に移動します。
Set MOVED="%BASE%\%MOVED%"
If Not EXIST %MOVED% Mkdir %MOVED%
Move "%~1" %MOVED%
Shift
Goto LOOP

:ENDP
Echo.
Echo 移動が完了しました。
Echo 何かキーを押して終了してください。
Pause>NUL
Exit /b 0

といった感じになります。
移動先を変える場合は「3行目のBASE=の後を変える」とか
「Set MOVED=%~n1\A みたいなとこを変える」です。

追加機能
・ディレクトリの自動作成
・拡張子が想定外の場合の追加(Eに移動)
・拡張子が無かった場合の追加(ファイル名.d\Fに移動)

投稿日時 - 2011-05-31 20:44:18

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

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

回答(3)

ANo.3

作るにあたって以下の条件を知りたいです。

・ファイルの拡張子がjpg bmp pngでない場合は?
・pngのファイルサイズは最大どれくらいありますか?
 (どれくらいまで対応しますか)

これにさらに というのは、
・そのファイル名と同名のフォルダ(既に作成済み)の中にある、Aというフォルダの下のA,B,C,Dなのか
・そのファイル名と同名のフォルダ同名のフォルダの中にA,B,C,Dがあるのかどちら?

投稿日時 - 2011-05-31 20:49:05

お礼

ありがとうございました!

投稿日時 - 2011-05-31 23:27:24

ANo.1

バッチは、文字列切り出しのような構文が無いので、
そういった処理は難しいですね。

vbscript とか jscript を検討してみてはどうでしょう。

投稿日時 - 2011-05-31 19:17:11

お礼

ありがとうございました!

投稿日時 - 2011-05-31 23:27:08

あなたにオススメの質問