【问题标题】:Command output set as variable命令输出设置为变量
【发布时间】:2022-01-24 00:15:57
【问题描述】:

我一直在尝试制作一个安装当前 nvidia 驱动程序的脚本,我已经走了很远,但还缺少一件事

我正在尝试使用 nvidia-smi 查找驱动程序版本,这是命令输出

C:\>nvidia-smi --query-gpu=driver_version --format=csv
driver_version
457.30

我一直在尝试在 %driver% 中设置 457.30,这就是我目前得到的结果

FOR /F "tokens=* skip=1" %%g IN ('nvidia-smi --query-gpu=driver_version --format=csv') do (SET "driver=%%g")

我也尝试了与 findstr 的组合,但结果是一场灾难

for /F "tokens=* skip=1" %%g in ('nvidia-smi --query-gpu=driver_version --format=csv ^| findstr "."') do set driver=%%g

在任何情况下,%%g 和 %driver% 都会返回 empty

echo %driver% 

返回

C:\>echo
ECHO is on.

有什么想法吗?

感谢您的合作。

【问题讨论】:

  • 您是说运行该代码时没有收到错误消息
  • 不,变量只是空的,echo %driver% 什么都不返回

标签: windows batch-file cmd


【解决方案1】:

你的变量没有被设置,因为现在你的nvidia-smi 命令正在抛出一个错误(奇怪的是到标准输出)但是skip=1 正在跳过它,所以没有什么可以设置变量了。

= 是字符串的默认分隔符之一,因此您的命令中的两个 = 符号都需要转义才能正确执行查询。

@echo off
for /F "delims=" %%g IN ('nvidia-smi --query-gpu^=driver_version --format^=csv ^| find "."') do set "driver=%%g"
echo %driver%

【讨论】:

  • SomethingDark,我只是想确保我不会发疯,并且用户使用的原始代码应该导致错误,并且如果用户从命令行。
  • @Squashman - 我自己也很惊讶,但nvidia-smi 的错误由于某种原因进入标准输出并被跳过。如果skip=1 不在那里,他们肯定会看到它。
  • 我想我稍后会在我的桌面上运行该代码。有时你只需要亲眼所见就能相信。
  • 是的,现在我自己也确认了,@Squashman。 Invalid combination of input arguments. Please run 'nvidia-smi -h' for help. 当我删除 skip=1 但没有结果时跳过。将 sterr 重定向到 nul 时的事件。 FOR /F "tokens=*" %g IN ('nvidia-smi --query-gpu=driver_version --format=csv 2^>nul') do echo %g 有些程序确实会将它们的错误写入标准输出流,我最近经历了很多。
猜你喜欢
  • 2014-05-26
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
  • 2017-04-20
  • 2020-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多