指定以外のファイルやフォルダを削除したい。(デスクトップで指定した複数ファイル以外のファイルを一括削除する)

Okwave(教えてgoo!)からの質問。すでに No.4 で回答済み。

質問者:moon879 指定以外のファイルやフォルダを削除したい。

困っています デスクトップ上にあるファイル、フォルダの内、
指定したファイル、フォルダ以外を削除するBATファイル、
もしくはVBSを作成したいのですが、
どのような記述をすれば良いのでしょうか?
OSはWindows2000 server SP4です。

どなたかご教示よろしくお願いいたします。

例:
デスクトップに以下の2つのファイルと1つのフォルダがあり、
これ以上デスクトップにファイルやフォルダを増やしたくないのですが、

「hoge2.txt」
hoge.lnk」
hoge

誤って以下のファイルとフォルダを作成してしまいました。

「hoge1.txt」
hoge.jpg」
「hoge2」


「hoge2.txt」と「hoge.lnk」「hoge」は常にデスクトップに残し、
「hoge1.txt」と「hoge.jpg」「hoge2」を一括削除したい。

質問投稿日時:09/03/28 03:48質問番号:4832987

http://okwave.jp/qa4832987.html

以下のような流れでバッチを作成しました。
(1)pushd でデスクトップに移動。
(2)デスクトップの全てのファイルに対してfor文でサブルーチンへ飛ぶ。
(3)デスクトップの全てのフォルダに対してfor /D 文でサブルーチンへ飛ぶ.

for %%f in ( * ) do call :sub "%%f"

という記述は常套手段でよく使います。全てのファイルに対してやりたい処理を :sub 以降に記述します。

サブルーチンでは
(1)flag 変数をOFFにセット
(2)for 文で残したいファイル・フォルダ名のファイルセットを指定してサブルーチンで指定した引数(=デスクトップ上のファイル・フォルダ名)を名前を比較して、一致したらflagをONにセット
(3)flag がONなら何もせずサブルーチンを終了
(4)ファイルだったら、指定された引数に対してdelコマンドを実行
(5)フォルダだったら、指定された引数に対してrd /S /Qコマンドを実行
という流れです。

サブルーチンについては、call /? のヘルプに説明があります。

:---------------------------------------------------- sample.bat
echo off
pushd %userprofile%\デスクトップ
for %%f in ( * ) do call :sub "%%f"
for /D %%f in ( * ) do call :sub "%%f" d
popd
exit /b

:sub
set flag=OFF
for %%e in ( hoge2.txt hoge.lnk hoge ) do if %1=="%%e" set flag=ON
if "%flag%"=="ON" goto :EOF
if "%2"=="" del %1
if "%2"=="d" rd /S /Q %1
goto :EOF

良回答20pt頂きました。ありがとうございます!