批处理:输出Reg Query到CSV结果

时间:2017-03-01 00:42:57

标签: csv batch-file cmd command-line-interface

我很难格式化批处理以将查询结果输出到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 个答案:

答案 0 :(得分: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%

的文件

将服务器名称的文件读取到%%a,然后使用delayedexpansion将col1与所需数据col4建立为echo

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

wmic行在我的系统上产生了一条错误消息(无效选项),因此我要2>nul处理错误消息。

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