- 【.cmd】 バッチファイルスクリプト %11 【.bat】©2ch.net
151 :デフォルトの名無しさん[sage]:2015/06/02(火) 11:53:10.99 ID:kNAcHIfI - 特定のフォルダ配下の空のフォルダだけを抽出して処理したいのですが上手く行きません。
特定のフォルダ配下の子フォルダの中身にはどんなファイル、孫にあたるサブフォルダ(※1)、とも存在しない物だけが 本処理対象(退避場所へ移動させる)となります。 ※1 サブフォルダは存在してても中身が空の物は”例外処理(フォルダの削除)”の対象とします。 一言でフォルダの中身が空と行っても子フォルダとサブ以下では処理が異なります。子は本処理、孫以下は例外。 d:\temp ├aaa(ファイルはあり)-aaa1(ファイルは空)-aaa2(ファイルは空) ├bbb(ファイルは空)-bbb1(ファイルはあり) ├ccc(ファイルは空)-ccc1(ファイルは空) ├ddd(ファイルはあり) ├eee(ファイルは空) ├fff(ファイルは空)-fff1(ファイルは空)-fff2(ファイルはあり) ├ggg(ファイルはあり)-ggg1(ファイルはあり)-ggg2(ファイルは空) 本処理対象 :eee 例外処理対象:aaa1,aaa2,ccc,ccc1,ggg2 処理対象外 :aaa,bbb1(bbb毎),ddd,fff2(fff fff1毎),ggg(ggg1毎) (つづく)
| - 【.cmd】 バッチファイルスクリプト %11 【.bat】©2ch.net
152 :デフォルトの名無しさん[sage]:2015/06/02(火) 11:56:57.04 ID:kNAcHIfI - set dir_path=d:\temp
set cnt=1 loop-st: if cnt==5 goto loop-end for /d /r %dir_path% %%D in (\*) do ( //サブフォルダを含む指定配下のフォルダの全リストを取得 if not exist "%%D\*nul" ( //サブフォルダが無い場合対象とする for %%S in (%%D\*.*) do ( //さらに中にファイルが存在し無ければ本処理対象 ※2 本処理 ) ) else ( for %%S in (%%D\*.*) do ( //さらに中にファイルが存在し無ければ本処理対象 ※2 例外処理 ) ) set /a cnt=%cnt%+1 :loop-end って感じで記述したのですが※2で「無ければ」の書き方判らなくて情け無い事に断念。if not exitですと *.*指定をするとバッチが落ちる(コマンドプロンプト窓が強制的に終了しエラーも確認しにくい)ため上手く行きません。 またfor文の中で強引に goto とラベルを記載するやり方はエラー(※2)となりました。 ※2 ()の使い方…と表示してたのは確認出来ました。 なおフォルダの階層は最大4です。aaa2は階層3となります。また上記では例外中の例外なcccに対してもまだ未対応です。 cccは子フォルダですが、空のサブフォルダしかないパターンで本来あってはいけないフォルダとなりますので 例外処理行き(ccc,ccc1共に削除)です batでは困難でしょうか?正解コーデングのご呈示をお願い申し上げます。
|
|