【问题标题】:skip option not working in for loop, batch script跳过选项不适用于 for 循环,批处理脚本
【发布时间】:2016-03-01 14:57:11
【问题描述】:

我有以下代码:

for /F "tokens=3 skip=2 usebackq" %%A in (`"REG QUERY !KEY_NAME! /v VALUE_NAME!"`) do (
    set SafeSignVersionValue=%%A
    @echo SafeSign Version = !SafeSignVersionValue! >> %USERNAME%.txt
)       

它是我们域中每个用户登录时执行的脚本的一部分 (它位于 SysVol 文件夹中)。 reg 查询的结果是 3 行 (第一行为空白)。我对最后一行的第三个标记感兴趣(因此 令牌=3 和跳过=2)。

当我从控制台窗口“本地”(在我的计算机中)运行此脚本时 它工作正常:我得到了我正在寻找的数据。

如果脚本是从 SYSVOL 运行的,它将无法正常工作。好像没有 跳过前 2 行(skip=2 不起作用?)因为我在输出中得到 2 行

SafeSign Version = xxxx(从第一行获取第三个令牌) SafeSign Version = yyyy(从第 2 行获取第 3 个令牌)

这是为什么呢?是否与令牌的顺序有关,跳过?这是 我唯一能想到的,但如果是的话,为什么作为一部分运行时很重要 登录 (SYSVOL),但如果在本地运行则不会?

提前致谢!

【问题讨论】:

  • VALUE_NAME! 应该是 !VALUE_NAME!
  • 粘贴/编辑代码时出错。这 !在那里。
  • 实际上我没有得到一个空行作为reg query输出的第一行;我只得到两行:第一行包含查询的密钥,然后是一个空行...所以我无法重现您的问题...
  • 我在屏幕上显示 4 行(CMD 控制台):第 1 和第 4 行为空,第 2 和第 3 行带有信息。如果我将输出重定向到 txt 文件并在编辑器中打开它,我只会得到 2 行信息和第 3 行空(我相信是 CR)。必须用十六进制编辑器检查

标签: batch-file for-loop token options operator-precedence


【解决方案1】:

如果您要查找 LAST 行的第三个值。你可以不跳过。 最后一行将是最后评估的。

试试这样:

for /F "tokens=3" %%A in ('REG QUERY !KEY_NAME! /v !VALUE_NAME!') do set "SafeSignVersionValue=%%A"

@echo SafeSign Version = !SafeSignVersionValue! >> %USERNAME%.txt

【讨论】:

  • 试过了。这是行不通的。我得到了两行评估。但是,它确实适用于类似的 reg 查询。这是为什么?我不知道:(
猜你喜欢
  • 1970-01-01
  • 2011-02-05
  • 2013-10-01
  • 2017-02-03
  • 2023-03-06
  • 1970-01-01
  • 2022-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多