プロが教える店舗&オフィスのセキュリティ対策術

デスクトップ上にあるファイル、フォルダの内、
指定したファイル、フォルダ以外を削除する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」を一括削除したい。

A 回答 (4件)

以下のようなバッチファイルで可能です。


デスクトップのファイルのうち、指定したファイル名(フォルダ名)に一致するもの以外をすべて削除します。バッチでの削除ですのでゴミ箱には残りませんのでご注意ください。

デスクトップに残すファイル・フォルダの指定をバッチの下から5行目の( )内に記述します。
当方このバッチのテスト中にデスクトップのファイルをかなり消してしまいました:-)
記述ミスにはくれぐれもご注意を。


:---------------------------------------------------- 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
    • good
    • 6
この回答へのお礼

非常にわかりやすかったです。ありがとうございます。

お礼日時:2009/04/01 21:42

ANo.#1の補足 Part 2。



ANo.#1では、ファイル名の指定を間違えた場合、削除したくないファイルが削除されてしまいますので、
@echo off
echo.

の後に、

if not "%~1"=="" if not exist %1 (echo ファイル名の指定が間違っています:%1) && goto :eof
if not "%~2"=="" if not exist %2 (echo ファイル名の指定が間違っています:%2) && goto :eof
if not "%~3"=="" if not exist %3 (echo ファイル名の指定が間違っています:%3) && goto :eof
if not "%~4"=="" if not exist %4 (echo ファイル名の指定が間違っています:%4) && goto :eof
if not "%~5"=="" if not exist %5 (echo ファイル名の指定が間違っています:%5) && goto :eof
if not "%~6"=="" if not exist %6 (echo ファイル名の指定が間違っています:%6) && goto :eof
if not "%~7"=="" if not exist %7 (echo ファイル名の指定が間違っています:%7) && goto :eof
if not "%~8"=="" if not exist %8 (echo ファイル名の指定が間違っています:%8) && goto :eof
if not "%~9"=="" if not exist %9 (echo ファイル名の指定が間違っています:%9) && goto :eof

を入れて、ファイルの実在を確認するようにした方が良いかもしれません。
    • good
    • 1

ANo.#1の補足。



ここのサイトは、投稿の各行頭のスペースやタブコードを自動的に削除するようになっていて、インデントが分かりにくくなるために、ANo.#1のバッチファイルの各行頭は、タブコードを全角スペース2つに置き換えていますので、コピー&ペーストする場合には、全角スペースを削除するか、半角スペースまたはタブコードに置き換えてください。
    • good
    • 0

指定したファイルを除外するというのは、少々面倒なので、ちょっと、下にびろ~~んと長くなりますが・・・。



注意:
 バッチファイルのパラメータの指定の制限上、除外するファイル名やフォルダ名の指定は9つまでです。

解説:
 半角スペースを含むファイル名やフォルダ名を指定する場合には、ファイル名やフォルダ名を二重引用符(")で括る必要があり、パラメータ 「%1」、「%2」、・・・、「%9」には二重引用符がついた状態のファイル名やフォルダ名が入っていますが、「for %%f in (*.*)」で「%%f」に入るファイル名やフォルダ名には二重引用符がつかず、if文を「if /i "%%f"=="%1"」のように「%1」、「%2」、・・・、「%9」で指定すると、二重引用符が2つ重なってうまく比較できなくなってしまうので、「%~1」、「%~2」、・・・、「%~9」で二重引用符を取り除いたものを二重引用符で括っています。

@echo off
echo.
rem ファイルの削除
for %%f in (*.*) do (
  if /i "%%f"=="%~1" (
    echo %%f not delete.
  ) else (
    if /i "%%f"=="%~2" (
      echo %%f not delete.
    ) else (
      if /i "%%f"=="%~3" (
        echo %%f not delete.
      ) else (
        if /i "%%f"=="%~4" (
          echo %%f not delete.
        ) else (
          if /i "%%f"=="%~5" (
            echo %%f not delete.
          ) else (
            if /i "%%f"=="%~6" (
              echo %%f not delete.
            ) else (
              if /i "%%f"=="%~7" (
                echo %%f not delete.
              ) else (
                if /i "%%f"=="%~8" (
                  echo %%f not delete.
                ) else (
                  if /i "%%f"=="%~9" (
                    echo %%f not delete.
                  ) else (
                    erase "%%f"
                  )
                )
              )
            )
          )
        )
      )
    )
  )
)
rem フォルダの削除
for /d %%d in (*.*) do (
  if /i "%%d"=="%~1" (
    echo %%d not delete.
  ) else (
    if /i "%%d"=="%~2" (
      echo %%d not delete.
    ) else (
      if /i "%%d"=="%~3" (
        echo %%d not delete.
      ) else (
        if /i "%%d"=="%~4" (
          echo %%d not delete.
        ) else (
          if /i "%%d"=="%~5" (
            echo %%d not delete.
          ) else (
            if /i "%%d"=="%~6" (
              echo %%d not delete.
            ) else (
              if /i "%%d"=="%~7" (
                echo %%d not delete.
              ) else (
                if /i "%%d"=="%~8" (
                  echo %%d not delete.
                ) else (
                  if /i "%%d"=="%~9" (
                    echo %%d not delete.
                  ) else (
                    rmdir /s /q "%%d"
                  )
                )
              )
            )
          )
        )
      )
    )
  )
)
    • good
    • 0
この回答へのお礼

ありがとうございます。参考にさせていただきます。

お礼日時:2009/04/01 21:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A