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= " %%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
我应该尝试使用标签吗?
解决方案
构建列表的一种简单方法是字符串连接。下面使用宏在 for 循环期间构建和分隔列表(以及其他功能)。
演示脚本:
@Echo Off
Set "DLM= "
Set "List/A=(If "!$L:~0,1!"=="!DLM!" Set "$L=!$L:~1!")& Set "$L#=0"& For %%n in (1 2)Do if %%n==2 (For %%l in (!$L!)Do (Set "$L[!$L#!]=%%l"&Set /A "$L#+=1"))Else Set $L=!$L!!DLM!"
Setlocal EnableDelayedExpansion
FOR /F "tokens=1* delims= " %%G IN ('reg query "\\%ComputerName%\HKEY_LOCAL_MACHINE\HARDWARE\ACPI"') DO %List/A:$L=HardWare%%%~nG
(Echo/!HardWare!) 1>"output.csv"
使用子字符串修改在扩展时提供变量名称,DLM 可以修改为您选择的分隔符
上面的宏对于您的特定用途来说是多余的,因为它还跟踪有多少项目附加到列表中,并将列表值定义到数组中。
可以替代上述定义的满足您需求的最小版本List/A
是:
Set "List/A=For %%n in (1 2)Do if %%n==2 (If "!$L:~0,1!"=="!DLM!" Set "$L=!$L:~1!")Else Set $L=!$L!!DLM!"
推荐阅读
- json - Replace values of specific sub dicts in nested json based on condition
- html - How to prevent download action to execute multiple times with a html link element?
- xamarin - Prism TabbedPage:导航回上一页不起作用
- html - html control site with overlay popup
- python - Python Pandas 删除重复单元格问题
- c# - Draw graphics from DataTable and get the possibility to change the scale dynamically
- python-3.x - Microsoft Graph API 和 Python 的问题
- python-3.x - mongoengine 是否支持 MongoDB 中的 Transactions API?
- llvm-ir - 运行 LLVM 优化器和编译器并直接从内存中执行
- python - Discord py:如何向新用户打招呼?