Windows批处理文件 - 无法设置变量值

时间:2012-12-19 15:16:14

标签: windows if-statement batch-file windows-console

我正在编写一个脚本,该脚本应该清空连接到计算机的所有设备/分区的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"
    )
)

3 个答案:

答案 0 :(得分:3)

有几个问题。

首先,您要设置nodev变量及其周围的%,只有在访问变量时才会使用。

其次,您需要使用延迟扩展来在for循环内使用!代替%来访问该变量。

试试这个

@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"
)
)

答案 1 :(得分: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"
    )
)

答案 2 :(得分:0)

为什么不下载像

这样的简单程序
EmptyRecycleBin.exe

完美运作

使用谷歌获取链接