【发布时间】:2018-07-19 14:58:14
【问题描述】:
我正在编写一个批处理脚本,通过“查询用户”命令返回登录用户。但是,我遇到了这里的其他线程无法帮助我解决的困难。这是我的(几乎)整个脚本,为简洁起见,最后只缺少一些回声:
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
SET me=%~n0
SET parent=%~dp0
SET count=1
FOR /F "skip=1 tokens=* USEBACKQ" %%F IN (`query user`) DO (
::obtain line of output
SET var!count!=%%F
::obtain first character from line
CALL SET ^faf=^%%var!count!:~0,1%%
::testing purposes
CALL ECHO count:^!count! faf1:^!faf!
::remove the '>' character, if present
IF ^!faf! == ^> (
SET var!count!=!var%count%:~1! && ECHO success )
SET /a count=!count!+1
)
它应该做的是获取几行输出中的一个,创建一个临时变量“faf”来存储该行的第一个字符,然后将其与“查询用户”总是添加的“>”字符进行比较在当前用户名之前 - 如果检测到该字符,则覆盖该变量,省略第一个字符。同时,echo 打印循环计数器的当前值和 temp 变量。
问题在于 CALL SET 命令:它似乎忽略了包含“>”字符的行,对于其他行它按预期工作。因此,IF 永远不会被使用,并且 echo 会打印计数器,但不会打印第一个字符 - 用于 ">" 行。
请注意,这些行仍然存储在 var1-6 中,用“^”打印出来表明即使是带有“>”的行也打印得很好。唯一的问题是检测并忽略那个该死的尖括号。有人可以帮我解决这个问题吗?我错过了什么?
【问题讨论】:
-
根据您的需要,您可能会发现以下方法很有用,
@For /F Tokens^=4Delims^=^" %%A In ('WMIC Path Win32_LoggedOnUser') Do @Echo=%%A
标签: batch-file