标题: [文件操作] 【已解决】求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 )在命令行中的实现方式如下:- 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- @if (0)/*==(0)/* echo off
-
- cd.>2.txt
- for /f "delims=" %%a in (1.txt) do (
- set /a m+=1
- set "n=%%a"
- setlocal enabledelayedexpansion
- set /a m=m%%2
- if !m! neq 0 (
- echo !n!
- cscript //nologo //e:jscript "%~f0" 1 !n!
- ) else (
- cscript //nologo //e:jscript "%~f0" 2 !n!
- echo !n!
- echo=
- )
- endlocal
- rem echo=
- )>>2.txt
-
- pause&exit /b
- rem */@end
-
- var s=[],ags=WScript.Arguments;
- for(var i=1;i<ags.Length;i++){
- if (ags(0) == "1"){
- if (ags(i) == '/f') break;
- s.push(ags(i));
- } else {s.push(ags(i));}
- }
- if (ags(0) == "1"){
- s.push('/f');
- s[2]='"'+s[2]+'"';
- WScript.StdOut.Write(s.join(' '));
- WScript.StdOut.Write(' /v "Icon" /t REG_SZ /d ');
- } 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- @echo off
- set "OldFile=1.txt"
- set "NewFile=2.txt"
- set /p Row1=<"%OldFile%"
- >"%NewFile%" echo,%Row1%
- for /f tokens^=2^ delims^=^" %%a in ('type "%OldFile%"') do (
- set "RegKey=%%a"
- goto :Next
- )
- :Next
- for /f tokens^=4^ delims^=^" %%a in ('type "%OldFile%"') do (
- set "RegValue=%%a"
- )
- >>"%NewFile%" echo reg add "%RegKey%" /f /v "Icon" /t REG_SZ /d "%RegValue%"
- >>"%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 - 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 - 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 - 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://www.bathome.net/) |
Powered by Discuz! 7.2 |