所以,我有一段批处理代码:
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
,将其作为服务或任务运行。我确定这是一个更好的方法,但还没有想出来(与持久性和缓存登录有关),所以它是一个快速的解决方法。
答案 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 ----------------------------------------- )
)