批量变量设置,但在之后立即变为空白

时间:2014-12-09 19:53:19

标签: windows variables batch-file for-loop

所以,我有一段批处理代码:

    SET "ACTSESS=%tmp%\activesessions.txt"
    NET USE > %ACTSESS%

    setlocal  EnableDelayedExpansion
    FOR /F "tokens=2 delims= " %%A IN (%ACTSESS%) DO (
        SET "BB=%%A"
        ECHO %BB%
        IF /I "!BB:~0,2!" EQU "\\"  SET "SESSDEL=%BB%"
        NET USE /delete %SESSDEL% /DELETE
        ECHO.
        ECHO -----------------------------------------
        ECHO   %SESSDEL% Ended Successfully. 
        ECHO -----------------------------------------  )
)

SET BB=%%A 在cmd屏幕上设置获取适当变量的subbed - 在这种情况下,字符串如下:SET "BB=local", 但在ECHO %BB%返回%BB%后立即空白。

我在这里做错了吗?

更新好的,解决方法是我忘了在for-loop中延迟扩展后放置!!而不是%%

此代码用于在Windows上删除未映射的会话,而不是在许多计算机和共享上手动执行NET USE \\server\share /DELETE,将其作为服务或任务运行。我确定这是一个更好的方法,但还没有想出来(与持久性和缓存登录有关),所以它是一个快速的解决方法。

1 个答案:

答案 0 :(得分:1)

delayed expansion下(并在括号内),您需要访问附带的变量,而不是

SET "ACTSESS=%tmp%\activesessions.txt"
NET USE > %ACTSESS%

setlocal  EnableDelayedExpansion
FOR /F "tokens=2 delims= " %%A IN (%ACTSESS%) DO (
    SET "BB=%%A"
    ECHO !BB!
    IF /I "!BB:~0,2!" EQU "\\"  SET "SESSDEL=!BB!"
    NET USE /delete !SESSDEL! /DELETE
    ECHO.
    ECHO -----------------------------------------
    ECHO   !SESSDEL! Ended Successfully. 
    ECHO -----------------------------------------  )
)