DEL *.* でファイルを全部消してしまうバグをWindows環境で防止する

RHEL6でsquidを再起動するとrm -rf /*が実行されるバグが発見される | スラド
Steam for Linuxのバグ、予期せぬ「rm -rf "/"*」 | スラド

これ、 Linux 系ではよく見かける不具合だけど、 Windows ではあまり聞かない。
でも、実は似たようなことが起こる可能性がある。

次のようなバッチファイルを実行したとしよう

@echo off
cd C:\Windows\system32\Temp
for %%i in (*.EXE) do (
del /F /Q "%%i"
)

どうなるだろうか?

C:\Windows\system32\Temp が存在するのならばいいのだが、存在しない場合、
フォルダの移動に失敗して、カレントフォルダが削除対象になってしまう

管理者権限で実行すると %SystemRoot%\System32 がカレントフォルダになってしまう

これは危険だ・ω・
ではどうすればいいか?

@echo off
cd C:\Windows\system32\Temp
if not "%ERRORLEVEL%"  == "0" (
echo フォルダがないにゃん
pause
) else (
for %%i in (*.EXE) do (
del /F /Q "%%i"
)
)

CDの直後の成否を判断するために
ERRORLEVEL でチェックしてやればいいのだ。
失敗していれば何も実行しなければOK

おすすめ

3件のフィードバック

  1. 名無し より:

    2000の場合は、
    \WINNT\
    ですよね?XPも同じ?

  2. yoka より:

    del *.*と入力してもごみ箱に入るとか期待したのですが^^;

  3. M_M より:

    >可能性がある
    これかもしれない
    ***p://www.fujixerox.co.jp/company/news/notice/2014/0314_dw.html

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です