我正在尝试写一个批处理文件,它将拉取计算机信息并将其导出到文本文件,即output.txt我有一个正确的。
wmic CSProduct get vendor >> c:\output.txt
wmic CSProduct get name >> c:\output.txt
这给了我一个包含
的output.txt供应商
技嘉科技有限公司
名称
H61N-USB3
现在我需要一个批处理文件,将第2行和第4行转换为变量。我试过了
set "Name="
for /F "skip=1" %%a in (C:\output.txt) do if not defined Name set "Vend=%%a"
set "Name="
for /F "skip=3" %%b in (C:\output.txt) do if not defined Name set "Name=%%b"
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation /V Model /T REG_SZ /D "Vend, Name" /F
但我无法让它发挥作用。我对批处理脚本完全不熟悉,也不知道我在做什么。
答案 0 :(得分:3)
无需临时文件:
for /f "tokens=1,2 delims=," %%a in ('wmic CSProduct get vendor^,name^,version /format:csv') do (
set vend=%%a
set name=%%b
)
echo -%vend%-%name%-
wmic
有难看的行结尾。有几种方法可以欺骗他们。在这里,我选择使用另一个令牌(“包含”行结尾),未使用(版本)
答案 1 :(得分:0)
set "Vend="
for /F "skip=1" %%a in (C:\output.txt) do if not defined Vend set "Vend=%%a"
set "Name="
for /F "skip=3" %%b in (C:\output.txt) do if not defined Name set "Name=%%b"
echo(%Vend% %Name%
如果您想在vend
行中找到name
和reg
的值,请使用%vend%
和%name%
基本上,皮肤#lines,将vaue分配给正确的变量。对于此后的每一行,由于变量是set
,因此不要进行任何赋值。
啊 - 你可能想要整行,包括空格。
将"skip=1"
更改为"skip=1delims="
(将#skipped改为诉讼)
通过禁用分隔符,将整行读取分配给元变量%%a
。默认分隔符ar( Space Tab , ; )所以只有第一个“令牌”(直到第一个)找到分隔符)将被分配。
答案 2 :(得分:0)
你其实非常接近。
Set "Name="
应该是Set "Vend="
。for
行同样应该引用not defined Vend
而不是not defined Name
。delims=
以读取整个输入行。 (只需在命令行输入for /?
,即可查看“for”选项的更多详细信息。)reg add
行中,%%a
和%%b
应该是您创建的环境变量%Vend%
和%Name%
。所以,这应该有效:
set Vend=
for /F "skip=1 delims=" %%a in (C:\output.txt) do if not defined Vend set "Vend=%%a"
set Name=
for /F "skip=3 delims=" %%b in (C:\output.txt) do if not defined Name set "Name=%%b"
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation /V Model /T REG_SZ /D "%Vend%, %Name%" /F
答案 3 :(得分:0)
for /F "tokens=1,2 delims==" %%G IN ('wmic CSProduct get vendor /value ^|find /i "vendor"') do SET %%G=%%H
for /F "tokens=1,2 delims==" %%G IN ('wmic CSProduct get name /value ^|find /i "name"') do SET %%G=%%H
echo %Vendor% %Name%