2

Recycle.Binコンピューターに接続されているすべてのデバイス/パーティションを空にするスクリプトを作成しています。

これは、接続されていないデバイスを除いて、使用可能なデバイス(aからzの文字まで)をテストすることによって行われます。

ループIF内のステートメントが原因で、スクリプトが正しく機能しません。FORどうすればこれを回避できますか?

@echo off
Setlocal EnableExtensions EnableDelayedExpansion
FOR %%G IN (a b c d e f g h i j k l m n o p q r s t u v w x y z) DO (
    SET nodev=none
    fsutil fsinfo volumeinfo "%%G:" | find "Errore:" > nul
    IF %ERRORLEVEL% EQU 0 SET nodev="%%G:"
    IF "%%G:" NEQ "%nodev%" (
        RD /s /q "%%G:\RECYCLED"
        RD /s /q "%%G:\RECYCLER"
        RD /s /q "%%G:\$Recycle.Bin"
    )
)
4

3 に答える 3

3

いくつかの問題があります。

まず、変数にアクセスするときにのみ使用する'sを囲んでnodev変数を設定します。%

for次に、ループ内!で'sの代わりに'sを使用してその変数にアクセスするには、遅延展開を使用する必要があります%

代わりにこれを試してください

@echo off
Setlocal EnableDelayedExpansion
FOR %%G IN (a b c d e f g h i j k l m n o p q r s t u v w x y z) DO (
SET nodev=none
fsutil fsinfo volumeinfo "%%G:" | find "Errore:" > nul
IF !ERRORLEVEL! EQU 0 SET nodev="%%G:"
IF "%%G:" NEQ "!nodev!" (
RD /s /q "%%G:\RECYCLED"
RD /s /q "%%G:\RECYCLER"
RD /s /q "%%G:\$Recycle.Bin"
)
)
于 2012-12-19T15:21:19.513 に答える
1

fsutilの代わりにこれを試してください。また、そのよりクリーンなコードも賢明です。

@echo off
Setlocal EnableDelayedExpansion
FOR %%G IN (a b c d e f g h i j k l m n o p q r s t u v w x y z) DO (
    cd /d "%%G:" 2>nul
    IF !ERRORLEVEL! EQU 0 (
        RD /s /q "%%G:\RECYCLED"
        RD /s /q "%%G:\RECYCLER"
        RD /s /q "%%G:\$Recycle.Bin"
    )
)
于 2012-12-19T16:23:34.460 に答える
0

次のような簡単なプログラムをダウンロードしてみませんか

EmptyRecycleBin.exe

完璧に動作します

リンクにはグーグルを使用してください

于 2012-12-19T15:20:41.940 に答える