« デスクトップ上のフォルダーを削除してしまいった!(ノД`)・゜・。(その4) | トップページ | デスクトップ上のフォルダーを削除してしまいった!(ノД`)・゜・。(その6) »

2016年4月15日 (金)

デスクトップ上のフォルダーを削除してしまいった!(ノД`)・゜・。(その5)

今度は、こちら。

---------------<!usx.bat>---------------
@ECHO OFF
"C:\Program Files\7-Zip\7z.exe" l %1 | sed "/ D\.\.\./!D" >!us
FOR %%I IN (!us) DO SET SIZE=%%~zI
IF %SIZE% == 0 (
ECHO NO FOLDER : %1
"C:\Program Files\7-Zip\7z.exe" e -y -o"%~n1" %1>NUL
) ELSE (
ECHO IN FOLDER : %1
"C:\Program Files\7-Zip\7z.exe" x -y %1>NUL
)
----------------------------------------

『"C:\Program Files\7-Zip\7z.exe" l %1』

これは、圧縮ファイルの中のファイル名リストを出す。

『|』で、出力を『sed "/ D\.\.\./!D"』に

そうすると、ディレクトリのみ残る。

『>!us』でファイルに出力する。

『!us』のサイズが0か、そうでないかで
フォルダーが有るか無いかを調べる。

フォルダーが無いと、ベタに展開される。

意味が分からに人は、やってみればキット分かる。(笑)

『FOR %%I IN (!us) DO SET SIZE=%%~zI』

で、ファイルのサイズを『SIZE』に入れる。

『IF %SIZE% == 0 (』de

で、『SIZE』の値を確認する。

0なら、

『ECHO NO FOLDER : %1』で、結果を出力する。

『"C:\Program Files\7-Zip\7z.exe" e -y -o"%~n1" %1』

で、ファイル名をフォルダーにして、出力する。

『>NUL』これは、標準出力をしないようにする。

0以外なら、

『ECHO IN FOLDER : %1』で、結果を出力。

『"C:\Program Files\7-Zip\7z.exe" x -y %1>NUL』

で、通常展開する。

説明に、結構疲れた…。

因みに

『FOR %%I IN (!us) DO SET SIZE=%%~zI』

が、処理の肝!

この処理を見つけるまで、2週間ぐらい探したよ…。

つづく

|

« デスクトップ上のフォルダーを削除してしまいった!(ノД`)・゜・。(その4) | トップページ | デスクトップ上のフォルダーを削除してしまいった!(ノД`)・゜・。(その6) »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/108365/63559349

この記事へのトラックバック一覧です: デスクトップ上のフォルダーを削除してしまいった!(ノД`)・゜・。(その5):

« デスクトップ上のフォルダーを削除してしまいった!(ノД`)・゜・。(その4) | トップページ | デスクトップ上のフォルダーを削除してしまいった!(ノД`)・゜・。(その6) »