我非常了解c ++和unix命令(bhell shell),但我对批处理文件非常不熟悉。
我正在努力为我们所有的机器获取序列号,以验证它们是否正确命名,并发给正确的用户。请注意,这是我的第一篇文章,我只是给你一些简单的代码。
这是我到目前为止(适用于一台电脑)
hostname >> computerlog.txt rem send the pcname to txtfile computerlog
rem get serial number from bios
wmic bios get serialnumber >> computerlog.txt
rem get serial number from network location (pcname is a network pc)
wmic /user:johnnyboy/node:pcname bios get serialnumber >> computerlog.txt
我想要做的是使用循环读取名称并将其存储为变量,运行上面的命令,然后将名称后跟序列号输出到文本文件。
我不知道如何使用循环或创建变量。 感谢您的帮助。
答案 0 :(得分:0)
snippets:
set "varName=varValue"
:loopName
:: do something
goto:loopName
:: take each line of log to %%t - variable of cycle
for /f "usebackq delims=" %%t in ("computerlog.txt") do echo.%%t
example:
setlocal enabledelayedexpansion
set counter=0
for /f "usebackq delims=" %%t in ("computerlog.txt") do (
set "var!counter!=%%t"
set /a counter+=1
)
set var
答案 1 :(得分:0)
如果文件YourData.csv中的数据具有此格式
"NODENAME","USERNAME","PASSWORD"
"Computer1","Johnnyboy","secret"
这批次应该做你想做的事情:
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
(Echo "NODENAME","SerialNumber"
For /f "usebackq skip=1 tokens=1-3 delims=," %%A in (
"YourData.csv"
) Do For /f "tokens=2 delims==" %%S in (
'wmic /NODE:%%A /USER:%%B /PASSWORD:%%C bios get serialnumber /value^|find "="'
) Do For /f "delims=" %%T in ("%%S") Do Echo %%A,"%%T"
) > "YourSerials.csv"
由于wmic输出为UTF16且一个for循环无法补偿转换残余cr,cr,lf
,因此第三个将执行此操作。
示例输出:
> type YourSerials.csv
"NODENAME","SerialNumber"
"HP-G1610","CZxxxyyyPM "
请注意,这里的wmic速度非常慢。