【问题标题】:batch variable set, but goes blank immediately after批处理变量集,但之后立即变为空白
【发布时间】:2015-02-07 20:33:44
【问题描述】:

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

    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 Set 被替换为 cmd 屏幕上的正确变量 - 在这种情况下是一个字符串,如下所示:SET "BB=local", 但在ECHO %BB% 之后立即将%BB% 返回为空白。

我在这里做错了吗?

更新好的,解决方案是我在for循环中延迟扩展后忘记输入!!而不是%%

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

【问题讨论】:

    标签: windows variables batch-file for-loop


    【解决方案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 -----------------------------------------  )
    )
    

    【讨论】:

    • 现在您所需要的只是一些解释为什么您发布的代码是必要的文本。
    • 等一下,成功了,谢谢!如果有人觉得这很有用,我会稍微添加解释。
    猜你喜欢
    • 1970-01-01
    • 2016-08-03
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多