[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 【已解决】求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行中间(红色的)的固定的内容
我是小白,希望老师多多帮助

回复 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
复制代码
1

评分人数

TOP

回复  yyz219

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



    谢谢,我试一试先
我是小白,希望老师多多帮助

TOP

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()+'"');}
复制代码
1

评分人数

TOP

回复  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
我是小白,希望老师多多帮助

TOP

回复 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%"
复制代码
1

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复  yyz219


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

我试一试先 谢谢
我是小白,希望老师多多帮助

TOP

回复  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"
我是小白,希望老师多多帮助

TOP

回复 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
复制代码
1

评分人数

    • yyz219: 成功,非常感谢技术 + 1

TOP

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



     成功,非常感谢
我是小白,希望老师多多帮助

TOP

回复 8# yyz219


    请把你测试用的txt和6楼bat打包上传到网盘我看看
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 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
我是小白,希望老师多多帮助

TOP

回复 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
复制代码
1

评分人数

TOP

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


我试一试先 谢谢
我是小白,希望老师多多帮助

TOP

回复  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结尾的不成功
我是小白,希望老师多多帮助

TOP

返回列表