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

有几个问题。

首先,您在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

完美运行

使用 google 获取链接

于 2012-12-19T15:20:41.940 回答