Batch file 如何在相邻coulmn中对齐重新查询输出

Batch file 如何在相邻coulmn中对齐重新查询输出,batch-file,Batch File,这是我的密码 @ECHO Off SETLOCAL ENABLEDELAYEDEXPANSION ( FOR /f %%a in (C:\r\input.txt) do ( FOR /L %%s IN (1,1,1) DO SET "col%%s=" SET col1=%%a echo !col1! >>info.csv FOR /F "tokens=1*delims= "

这是我的密码

@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION

(   FOR /f %%a in (C:\r\input.txt) do (
        FOR /L %%s IN (1,1,1) DO SET "col%%s="
        SET col1=%%a
        echo !col1! >>info.csv
        FOR /F "tokens=1*delims= " %%G IN ('reg query "\\%%a\HKEY_LOCAL_MACHINE\HARDWARE\ACPI"') DO (
            FOR %%H IN ("%%~G") DO >>info.csv echo %%~nxH
        )))
这是
input.txt

LIN35008665
这是
output.csv

LIN35008655
DSDT
FACS
RSDT
SSD1
我希望
output.csv
如下所示:

LIN35008655
DSDT FACS RSDT SSD1

我应该尝试使用tab吗?

一种构建列表的简单方法是字符串连接。下面使用宏在for循环期间构建和分隔列表(以及其他功能)

演示脚本:

@Echo关闭
设置“DLM=”
设置“列表/A=”(如果“!$L:~0,1!”=”!DLM!“$L=!$L:~1!”)&设置“$L#=0”&如果%%n==2(如果%%L in(!$L!)),设置“$L[!$L!]=%L”&设置/A“$L+=1”);否则设置$L=!$L!!!!DLM!”
Setlocal EnableDelayedExpansion
对于/F“tokens=1*delims=“%%G IN('reg query“\\\%ComputerName%\HKEY\u LOCAL\u MACHINE\HARDWARE\ACPI“'))执行%List/A:$L=HARDWARE%%~nG
(Echo/!HardWare!)1>“output.csv”
变量名在扩展时使用子字符串修改提供,DLM可以修改为您选择的分隔符

上面的宏针对您的特定用途进行了详细介绍,因为它还跟踪列表中附加了多少项,并定义了数组中的列表值

可替代上述
List/A
定义的满足您需求的最低版本为:

Set“List/A=如果%%n==2(如果“!$L:~0,1!”==”!DLM!”设置“$L=!$L:~1!”),则在(12)中为%%n设置列表/A=”,否则设置$L=!$L!!DLM!“

鉴于您的信息和清晰度有限,我建议
output.csv
包含带有
C
omma
S
分隔的
V
值字段的记录。e、 g.
“LIN35008655”、“DSDT”、“FACS”、“RSDT”、“SSD1”

@Echo Off&SetLocal EnableExtensions DisableDelayedExpansion
(对于/F UseBackQDelims^=^EOL^=%%G In(“C:\r\input.txt”)Do(
对于('^“%\uuuuuu AppDir\uuuuuuu%wbem\WMIC.exe中的/F“Tokens=2 Delims={}”%%H^
/节点:“%%G”类StdRegProv调用枚举键“&H8000002”^^
“HARDWARE\ACPI”2^>NUL^|“%\uuuuuAppDir\uuuuu%find.exe”“sNames”^”
)是否设置“U8=%%H”&SetLocal EnableDelayedExpansion
回显“%%G”、!\u:”、“=”、“!&EndLocal”)1>“output.csv”

如果您仍然希望在扩展名为
.CSV
的文件中包含非CSV数据,只需进行一个小的修改

@Echo Off&SetLocal EnableExtensions DisableDelayedExpansion
(对于/F UseBackQDelims^=^EOL^=%%G In(“C:\r\input.txt”)Do(
对于('^“%\uuuuuu AppDir\uuuuuuu%wbem\WMIC.exe中的/F“Tokens=2 Delims={}”%%H^
/节点:“%%G”类StdRegProv调用枚举键“&H8000002”^^
“HARDWARE\ACPI”2^>NUL^|“%\uuuuuAppDir\uuuuu%find.exe”“sNames”^”
)是否设置“\uz=%%H”&SetLocal EnableDelayedExpansion&Echo%%G
设置“output.csv”

我已修复了您的格式,包括您的代码,该代码在您使用时格式无效。我们不知道您应该尝试什么,因为您没有告诉我们您希望CSV文件采用的格式。CSV文件没有任何列,它是一个纯文本文件,包含由字段组成的记录,每个字段由已知的分隔符m分隔ost通常是一个逗号,通常每个字段都有一个标题标识记录。嗨,Compo,如果我一开始不清楚,很抱歉。你的输入很有价值。我不确定CSV的格式是什么意思。但我希望reg查询输出显示在相邻的列中。还有什么我可以帮助你的吗。你可以告诉我们CSV的格式e CSV文件中没有列。为什么不先告诉我们您打算用什么程序打开CSV文件。您的代码似乎过于复杂:1.
for/L
循环完全没有必要,因为它只清除变量
col1
(以一种麻烦的方式),然后再进行设置;2.%%H的
循环是多余的,因为您可以简单地使用
%%~nxG
(而不是
%%~nxH
)。您应该寻找的是如何在没有新行的情况下回显文本(例如:
),以便可以构建您正在调用的“列”“..@PurvaParulekar,正如我在上一篇文章中所说的,不要为第三个
for
命令的每次迭代使用echo,而是构建一个变量<代码>对于(“%%~G”)中的%%H,请设置“line=!line!%%~nsh”
。在第三个
FOR
命令之后的另一行上显示:info.csv echo!队伍:~1