Board logo

标题: [文件操作] 【已解决】求bat:两行文本的中间插入一行(第三方也行),谢谢 [打印本页]

作者: yyz219    时间: 2023-10-7 16:39     标题: 【已解决】求bat:两行文本的中间插入一行(第三方也行),谢谢

本帖最后由 yyz219 于 2023-10-7 19:16 编辑

完美解决了:
gawk "NR==2{A=gensub(/^([^\042]+\042[^\042]+\042...).*$/,\"\\1\",\"g\",$0)}NR==3{print A\" /v \042Icon\042 /t REG_SZ /d \"gensub(/^.+(\042[^\042]+\042)$/,\"\\1\",\"g\",$0)}1" 1.txt>2.txt
——————————————————————————————————————
原来的问题:

需要处理的文本1.txt(内容不是固定的):
reg add "HKLM\SOFTWARE\Classes\Folder\shell\000" /f /ve /t REG_SZ /d "000"
reg add "HKLM\SOFTWARE\Classes\Folder\shell\000\command" /f /ve /t REG_EXPAND_SZ /d "D:\PE整理碎片(很好)\修改PE\程序\内存清理\内存清理.exe"
***********************************************************
运行批处理以后要达到的效果2.txt:
reg add "HKLM\SOFTWARE\Classes\Folder\shell\000" /f /ve /t REG_SZ /d "000"
reg add "HKLM\SOFTWARE\Classes\Folder\shell\000" /f /v "Icon" /t REG_SZ /d "D:\PE整理碎片(很好)\修改PE\程序\内存清理\内存清理.exe"
reg add "HKLM\SOFTWARE\Classes\Folder\shell\000\command" /f /ve /t REG_EXPAND_SZ /d "D:\PE整理碎片(很好)\修改PE\程序\内存清理\内存清理.exe"

—————————————————————————
其中2.txt的第2行是需要增加的:
2.txt的第2行的前面与第1行的前面相同
2.txt的第2行的后面与第3行的后面相同
2.txt的第2行中间(红色的)的固定的内容

作者: hfxiang    时间: 2023-10-7 17:47

回复 1# yyz219

gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe )在命令行中的实现方式如下:
  1. gawk "NR==1{print;A=gensub(/^([^\042]+\042[^\042]+\042...).*$/,\"\\1\",\"g\",$0)}NR==2{print A\" /v \042Icon\042 /t REG_SZ /d \"gensub(/^.+(\042[^\042]+\042)$/,\"\\1\",\"g\",$0);print}" 1.txt>2.txt
复制代码

作者: yyz219    时间: 2023-10-7 18:03

回复  yyz219

gawk(  )在命令行中的实现方式如下:
hfxiang 发表于 2023-10-7 17:47



    谢谢,我试一试先
作者: Five66    时间: 2023-10-7 18:10

bat+jscript不知行否
保存为ansi编码的bat
1.txt编码ansi或gbk
  1. @if (0)/*==(0)/* echo off
  2. cd.>2.txt
  3. for /f "delims=" %%a in (1.txt) do (
  4. set /a m+=1
  5. set "n=%%a"
  6. setlocal enabledelayedexpansion
  7. set /a m=m%%2
  8. if !m!  neq 0 (
  9. echo !n!
  10. cscript //nologo //e:jscript "%~f0" 1 !n!
  11. ) else (
  12. cscript //nologo //e:jscript "%~f0" 2 !n!
  13. echo !n!
  14. echo=
  15. )
  16. endlocal
  17. rem echo=
  18. )>>2.txt
  19. pause&exit /b
  20. rem */@end
  21. var s=[],ags=WScript.Arguments;
  22. for(var i=1;i<ags.Length;i++){
  23. if (ags(0) == "1"){
  24. if (ags(i) == '/f') break;
  25. s.push(ags(i));
  26. } else {s.push(ags(i));}
  27. }
  28. if (ags(0) == "1"){
  29. s.push('/f');
  30. s[2]='"'+s[2]+'"';
  31. WScript.StdOut.Write(s.join(' '));
  32. WScript.StdOut.Write(' /v "Icon" /t REG_SZ /d ');
  33. } else {WScript.StdOut.WriteLine('"'+s.pop()+'"');}
复制代码

作者: yyz219    时间: 2023-10-7 18:34

回复  yyz219

gawk(  )在命令行中的实现方式如下:
hfxiang 发表于 2023-10-7 17:47


成功了,再次感谢
能不能再修改一下(将文本1.txt 修改为2.txt):
需要修改1.txt:
@echo off
reg add "HKLM\SOFTWARE\Classes\Folder\shell\快速启动" /f /ve /t REG_SZ /d "快速启动"
reg add "HKLM\SOFTWARE\Classes\Folder\shell\快速启动\command" /f /ve /t REG_EXPAND_SZ /d "D:\PE整理碎片(很好)\修改PE\程序\快速启动CLaunch(网络)\CLaunch.exe"
exit
———————————————————————————————————————
要得到的2.txt:
@echo off
reg add "HKLM\SOFTWARE\Classes\Folder\shell\快速启动" /f /ve /t REG_SZ /d "快速启动"
reg add "HKLM\SOFTWARE\Classes\Folder\shell\快速启动" /f /v "Icon" /t REG_SZ /d "D:\PE整理碎片(很好)\修改PE\程序\快速启动CLaunch(网络)\CLaunch.exe"
reg add "HKLM\SOFTWARE\Classes\Folder\shell\快速启动\command" /f /ve /t REG_EXPAND_SZ /d "D:\PE整理碎片(很好)\修改PE\程序\快速启动CLaunch(网络)\CLaunch.exe"
exit
作者: Batcher    时间: 2023-10-7 18:35

回复 1# yyz219


请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
  1. @echo off
  2. set "OldFile=1.txt"
  3. set "NewFile=2.txt"
  4. set /p Row1=<"%OldFile%"
  5. >"%NewFile%" echo,%Row1%
  6. for /f tokens^=2^ delims^=^" %%a in ('type "%OldFile%"') do (
  7.     set "RegKey=%%a"
  8.     goto :Next
  9. )
  10. :Next
  11. for /f tokens^=4^ delims^=^" %%a in ('type "%OldFile%"') do (
  12.     set "RegValue=%%a"
  13. )
  14. >>"%NewFile%" echo reg add "%RegKey%" /f /v "Icon" /t REG_SZ /d "%RegValue%"
  15. >>"%NewFile%" more +1 "%OldFile%"
复制代码

作者: yyz219    时间: 2023-10-7 18:39

回复  yyz219


请参考Q-04把bat文件保存为ANSI编码:
Batcher 发表于 2023-10-7 18:35

我试一试先 谢谢
作者: yyz219    时间: 2023-10-7 19:05

回复  yyz219


请参考Q-04把bat文件保存为ANSI编码:
Batcher 发表于 2023-10-7 18:35

不成功:2.txt:
reg add "HKLM\SOFTWARE\Classes\Folder\shell\000" /f /ve /t REG_SZ /d "000"
reg add " /f /ve /t REG_SZ /d " /f /v "Icon" /t REG_SZ /d "D:\PE整理碎片(很好)\修改PE\程序\内存清理\内存清理.exe"
reg add "HKLM\SOFTWARE\Classes\Folder\shell\000\command" /f /ve /t REG_EXPAND_SZ /d "D:\PE整理碎片(很好)\修改PE\程序\内存清理\内存清理.exe"
作者: hfxiang    时间: 2023-10-7 19:07

回复 5# yyz219
  1. gawk "NR==2{A=gensub(/^([^\042]+\042[^\042]+\042...).*$/,\"\\1\",\"g\",$0)}NR==3{print A\" /v \042Icon\042 /t REG_SZ /d \"gensub(/^.+(\042[^\042]+\042)$/,\"\\1\",\"g\",$0)}1" 1.txt>2.txt
复制代码

作者: yyz219    时间: 2023-10-7 19:14

回复  yyz219
hfxiang 发表于 2023-10-7 19:07



     成功,非常感谢
作者: Batcher    时间: 2023-10-7 21:59

回复 8# yyz219


    请把你测试用的txt和6楼bat打包上传到网盘我看看
作者: yyz219    时间: 2023-10-8 08:30

本帖最后由 yyz219 于 2023-10-8 08:54 编辑
回复  yyz219
hfxiang 发表于 2023-10-7 19:07

麻烦您再次修改一下:
如果1.txt如下【第3行末.exe(也可能是.bat)后,有空格 和 代码————不一定是:%%1】
@echo off
reg add "HKCR\Imagine.PNG\shell\333" /f /ve /t REG_SZ /d "333"
reg add "HKCR\Imagine.PNG\shell\333\command" /f /ve /t REG_EXPAND_SZ /d "D:\1绿色软件\多媒体\抓图抓滚动\抓滚动FSCapture97\FSCapture.exe %%1"
exit
——————————————————————————————————————
希望运行bat后得到的2.txt是:【第3行以.exe(.bat)结尾。即:.exe(.bat)后面没有空格 和 其它代码】
@echo off
reg add "HKCR\Imagine.PNG\shell\333" /f /ve /t REG_SZ /d "333"
reg add "HKCR\Imagine.PNG\shell\333" /f /v "Icon" /t REG_SZ /d "D:\1绿色软件\多媒体\抓图抓滚动\抓滚动FSCapture97\FSCapture.exe"
reg add "HKCR\Imagine.PNG\shell\333\command" /f /ve /t REG_EXPAND_SZ /d "D:\1绿色软件\多媒体\抓图抓滚动\抓滚动FSCapture97\FSCapture.exe %%1"
exit
作者: hfxiang    时间: 2023-10-8 08:50

回复 12# yyz219
  1. gawk "NR==2{A=gensub(/^([^\042]+\042[^\042]+\042...).*$/,\"\\1\",\"g\",$0)}NR==3{print A\" /v \042Icon\042 /t REG_SZ /d \"gensub(/^.+(\042[^\042]+\.exe)[^\042]*\042$/,\"\\1\042\",\"g\",$0)}1" 1.txt>2.txt
复制代码

作者: yyz219    时间: 2023-10-8 08:56

回复  yyz219
hfxiang 发表于 2023-10-8 08:50


我试一试先 谢谢
作者: yyz219    时间: 2023-10-8 09:15

回复  yyz219
hfxiang 发表于 2023-10-8 08:50

__________________________________________________________________________________________
麻烦您再次修改一下:
如果1.txt如下【第3行末.exe(也可能是.bat)后,有空格 和 代码————不一定是:%%1】
@echo off
reg add "HKCR\Imagine.PNG\shell\333" /f /ve /t REG_SZ /d "333"
reg add "HKCR\Imagine.PNG\shell\333\command" /f /ve /t REG_EXPAND_SZ /d "D:\1绿色软件\多媒体\抓图抓滚动\抓滚动FSCapture97\FSCapture.exe %%1"
exit
——————————————————————————————————————
希望运行bat后得到的2.txt是:【第3行以.exe(.bat)结尾。即:.exe(.bat)后面没有空格 和 其它代码】
@echo off
reg add "HKCR\Imagine.PNG\shell\333" /f /ve /t REG_SZ /d "333"
reg add "HKCR\Imagine.PNG\shell\333" /f /v "Icon" /t REG_SZ /d "D:\1绿色软件\多媒体\抓图抓滚动\抓滚动FSCapture97\FSCapture.exe"
reg add "HKCR\Imagine.PNG\shell\333\command" /f /ve /t REG_EXPAND_SZ /d "D:\1绿色软件\多媒体\抓图抓滚动\抓滚动FSCapture97\FSCapture.exe %%1"
exit
_____________________________________________________________________________________
.exe结尾的成功。.bat结尾的不成功
作者: hfxiang    时间: 2023-10-8 11:56

回复 15# yyz219
  1. gawk "NR==2{A=gensub(/^([^\042]+\042[^\042]+\042...).*$/,\"\\1\",\"g\",$0)}NR==3{print A\" /v \042Icon\042 /t REG_SZ /d \"gensub(/^.+(\042[^\042]+\.(exe|bat))[^\042]*\042$/,\"\\1\042\",\"g\",$0)}1" 1.txt>2.txt
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2