プロが教えるわが家の防犯対策術!

Win7 Pro 32bit

AのPC(test)のSCSIのHDDのsharedフォルダをネットワークドライブ割り当てしています。
BのPCから下記のバッチを実行しています。

pushd \\test\shared\aaaaa\bkup
del /F/S/Q *.*
for /D %%f in ( * ) do rmdir /S/Q "%%f"
xcopy /E/H/R/K/Y "D:\*" \\test\shared\aaaaa\bkup\


先日、SCSIのHDDの電源がオフになっているのに気付かず、
このバッチを実行してしまいました。
そうすると、デスクトップのpdfやExcelのファイルが全て消えました。
ごみ箱にも入っていません。
ショートカットファイル(.lnk)だけは残っていました。
あと、MSからDLしたsp52782-26155.exeも残っていました。

ファイル復元ソフトで一部は戻ったの良かったですが、このバッチで
なぜローカルのデスクトップのファイルが削除されたのでしょうか?
「ネットワーク名が見つかりません」ということでdelは実行されないと思ったのですが。

A 回答 (3件)

pushdコマンドのパスが見つからない(ネットワークが存在しない場合も同様)のでカレントディレクトリは変化しない。


そのまま次のdelコマンドを実行
という流れです。

バッチファイルがデスクトップにあればバッチの起動時のカレントディレクトリはデスクトップになるのでデスクトップのファイルは削除されます。
また一部のファイルが残った理由はデスクトップの実態は複数に分かれている(個人用と共通用)いて
普通にデスクトップに作れば個人用に入りますが、ソフトのインストール等で作られたショートカットは共通用に入ることがありますので、
共通用にあったファイルは残ったのだと思います。
    • good
    • 0
この回答へのお礼

バッチはデスクトップに置いています。
それでカレントがデスクトップのまま削除されたのですね。
ありがとうございます。

パブリックのデスクトップにあるショートカットが残っていたようです。
ただ、SPの実行ファイルはユーザーに置いてあったのですが、こちらは
プロパティを見ると、セキュリティでブロックされていたからかもしれません。

お礼日時:2011/07/06 11:00

あ~、やっちゃいましたね。



こういうバッチでは、以下のように、消すべき場所に絶対パス指定で番兵ファイルを作ってみて、番兵ファイルが正しく作れたか調べる必要があります。

echo 番兵 > \\test\shared\aaaaa\bkup\KEYFILE.$$$
pushd \\test\shared\aaaaa\bkup
if not exist KEYFILE.$$$ goto QUITBAT
del /F/S/Q *.*
for /D %%f in ( * ) do rmdir /S/Q "%%f"
xcopy /E/H/R/K/Y "D:\*" \\test\shared\aaaaa\bkup\
:QUITBAT

こうすると、echoやpushdに失敗してカレントディレクトリにKEYFILE.$$$が無い状態では、何もしません。
    • good
    • 0

バッチの成果としては、Dドライブの中身とネットワークの向こうにあるディレクトリを同期したいと言うことでしょうか?



WindowsVista以降をご使用であればrobocopyを使用されるとスマートかもしれません。

このバッチはpushdの結果に関わらずカレントディレクトリに無条件削除を実行していますので危険ですね。

pushdの結果を確認してエラーなら止めてしまえば良いので…

>pushd \\test\shared\aaaaa\bkup

if ERRORLEVEL 1 exit

>del /F/S/Q *.*
>for /D %%f in ( * ) do rmdir /S/Q "%%f"
>xcopy /E/H/R/K/Y "D:\*" \\test\shared\aaaaa\bkup\

一行追加して止めてしまうだけでも防ぐことができます。
    • good
    • 0

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