batch-file - Windows Batch - 延迟扩展索引
问题描述
我正在编写一个批处理脚本,通过“查询用户”命令返回登录用户。但是,我遇到了这里的其他线程无法帮助我解决的困难。这是我的(几乎)整个脚本,为简洁起见,最后只缺少一些回声:
@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 中,用“^”打印出来表明即使是带有“>”的行也打印得很好。唯一的问题是检测并忽略那个该死的尖括号。有人可以帮我解决这个问题吗?我错过了什么?
解决方案
使用命令的选项>
从输出中删除。DELIMS
FOR /F
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
SET me=%~n0
SET parent=%~dp0
SET count=1
FOR /F "skip=1 tokens=* USEBACKQ delims=>" %%F IN (`query user`) DO (
SET var!count!=%%F
SET /a count+=1
)
推荐阅读
- postman - 删除文件 /home/diba/Downloads/Postman/snapshot_blob.bin 时出错:权限被拒绝
- python - 在最近的日期滞后熊猫时间序列
- eclipse - Eclipse 仅带键盘
- java - 如何监控 jar 文件并在更改后重新运行它?
- android - 已发送 FCM 消息的状态
- reactjs - 如何在网格容器内安装弹性容器
- db2 - IBM DB2 9.7 中是否有 Pivot 功能?
- ios - apache 缓存设置酌情获取 200 或 304
- http - 我们可以在 2 个不同的网络中安装 zabbix 服务器和代理吗?
- php - PI Server 未完成 1000 个 SQL 查询的 php 代码