2017-03-01 112 views
0

我在格式化批处理以将reg查询结果输出到CSV文件字段时遇到困难。批处理:将查询结果输出到CSV结果

原始脚本:

@echo off 
for /f %%a in (\\localhost\C$\users\myusername\desktop\servers2.txt) do (
    echo %%a 
    reg query "\\%%a\HKLM\HARDWARE\DESCRIPTION\SYSTEM\BIOS" /v "SystemSKU" 
    reg query "\\%%a\HKLM\HARDWARE\DESCRIPTION\SYSTEM\BIOS" /v "SystemProductName" 
    wmic /node:%%a bios get serialnumber 
)>>testing.csv 
pause 

我需要从每个查询的结果进入到细胞中由左到右。第一个“echo %% a”是来自servers2.txt的PC主机名。

有没有人可以引导我走向正确的方向?

谢谢。

回答

1
@ECHO Off 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET "sourcedir=U:\sourcedir" 
SET "destdir=U:\destdir" 
SET "filename1=%sourcedir%\q42521299.txt" 
SET "outfile=%destdir%\outfile.txt" 
(
for /f %%a in (%filename1%) do (
    FOR /L %%s IN (1,1,4) DO SET "col%%s=" 
    SET col1=%%a 
    FOR /f "tokens=2*delims= " %%s IN ('reg query "\\%%a\HKLM\HARDWARE\DESCRIPTION\SYSTEM\BIOS" /v "SystemSKU"') DO SET col2=%%t 
    FOR /f "tokens=2*delims= " %%s IN ('reg query "\\%%a\HKLM\HARDWARE\DESCRIPTION\SYSTEM\BIOS" /v "SystemProductName"') DO SET col3=%%t 
    FOR /f "delims=" %%t IN ('wmic /node:%%a bios get serialnumber 2^>nul') DO SET col4=%%t 
    ECHO !col1!,!col2!,!col3!,!col4! 
) 
)>"%outfile%" 

GOTO :EOF 

你需要改变的sourcedirdestdir设置以适合你的情况。

我使用了一个名为q42521299.txt的文件,其中包含一些用于测试的虚拟数据。

可生产定义为%OUTFILE%

的文件中读取用于servernames节点到%%a文件然后建立到col1col4所需的数据和echo ES它,使用delayedexpansion。

使用空格分隔符分析reg query行,删除前两个标记并保留行的其余部分。

wmic行在我的系统中产生了一条错误消息(无效选项),所以我帮2>nul处置了错误消息。

此过程重新创建输出。如果您只是想附加到当前文件,您就会意识到这些更改。

+0

非常感谢。这正是我想要的。唯一的问题是它不输出序列号结果。我感谢您的帮助!你是个节省时间的人! –

+0

我还想指出,如果我要正常输入,那么获取序列确实有用。我提到这是为了澄清制造商是否输入它的任何混淆。 –

+0

如果我使用'/ node:localhost',我就乐在其中了。可能我在文件中错误地指定了'%% a',尽管'reg query'似乎与我的文件设置一起工作。 – Magoo