如何使用文件输入作为for循环中的变量来编写批处理文件

时间:2017-07-18 16:53:06

标签: batch-file cmd

我非常了解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

我想要做的是使用循环读取名称并将其存储为变量,运行上面的命令,然后将名称后跟序列号输出到文本文件。

我不知道如何使用循环或创建变量。 感谢您的帮助。

2 个答案:

答案 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速度非常慢。