Batch file 命令行帮助清理和代码生成

Batch file 命令行帮助清理和代码生成,batch-file,command-line,sed,Batch File,Command Line,Sed,需要帮助查找bat文件的一些命令/工具以自动转换填充行: %PCI\VEN_1B21&DEV_0601.DeviceDesc%= asahci_Inst, PCI\VEN_1B21&DEV_0601 %PCI\VEN_1B21&DEV_0602.DeviceDesc%= asahci_Inst, PCI\VEN_1B21&DEV_0602 %PCI\VEN_1B21&DEV_0611.DeviceDesc%= asahci_Inst, PCI\VEN_1B

需要帮助查找bat文件的一些命令/工具以自动转换填充行:

%PCI\VEN_1B21&DEV_0601.DeviceDesc%= asahci_Inst, PCI\VEN_1B21&DEV_0601
%PCI\VEN_1B21&DEV_0602.DeviceDesc%= asahci_Inst, PCI\VEN_1B21&DEV_0602
%PCI\VEN_1B21&DEV_0611.DeviceDesc%= asahci_Inst, PCI\VEN_1B21&DEV_0611
%PCI\VEN_1B21&DEV_0612.DeviceDesc%= asahci_Inst, PCI\VEN_1B21&DEV_0612
要执行此操作(清理):

为此(在前后和下一行插入代码):

我尝试过各种工具,如rxfind(零文档)和sed,但我认为我用错了。

使用sed:

pre='devcon find * | find \/i "'
post='" >NUL\nif \/i %ERRORLEVEL% equ 0 set DEVICE=DETECTED'
sed -n "s/.*\\\\\(.*\)/$pre\\1$post/p" input
或:


您还可以使用
awk

awk -F '\' -v a="devcon find * | find /i" -v b=">NUL\nif /i %ERRORLEVEL% equ 0 set DEVICE=DETECTED" '{ print a, "\""$NF"\"", b }' file
或:

结果:

devcon find * | find /i "VEN_1B21&DEV_0601" >NUL
if /i %ERRORLEVEL% equ 0 set DEVICE=DETECTED
devcon find * | find /i "VEN_1B21&DEV_0602" >NUL
if /i %ERRORLEVEL% equ 0 set DEVICE=DETECTED
devcon find * | find /i "VEN_1B21&DEV_0611" >NUL
if /i %ERRORLEVEL% equ 0 set DEVICE=DETECTED
devcon find * | find /i "VEN_1B21&DEV_0612" >NUL
if /i %ERRORLEVEL% equ 0 set DEVICE=DETECTED
sed 's/.*\\\(.*\)/devcon find * | find \/i "\1" >NUL\nif \/i %ERRORLEVEL% equ 0 set DEVICE=DETECTED/' input
awk -F '\' -v a="devcon find * | find /i" -v b=">NUL\nif /i %ERRORLEVEL% equ 0 set DEVICE=DETECTED" '{ print a, "\""$NF"\"", b }' file
awk -F '\' '{ printf "devcon find * | find /i \"%s\" >NUL\nif /i %%ERRORLEVEL%% equ 0 set DEVICE=DETECTED\n", $NF }' file
devcon find * | find /i "VEN_1B21&DEV_0601" >NUL
if /i %ERRORLEVEL% equ 0 set DEVICE=DETECTED
devcon find * | find /i "VEN_1B21&DEV_0602" >NUL
if /i %ERRORLEVEL% equ 0 set DEVICE=DETECTED
devcon find * | find /i "VEN_1B21&DEV_0611" >NUL
if /i %ERRORLEVEL% equ 0 set DEVICE=DETECTED
devcon find * | find /i "VEN_1B21&DEV_0612" >NUL
if /i %ERRORLEVEL% equ 0 set DEVICE=DETECTED