命令输出设置为变量
Posted
技术标签:
【中文标题】命令输出设置为变量【英文标题】: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% 什么都不返回 【参考方案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
有些程序确实会将它们的错误写入标准输出流,我最近经历了很多。以上是关于命令输出设置为变量的主要内容,如果未能解决你的问题,请参考以下文章