
标题: [文本处理] 求批处理:删除文本含关键字(整行),修改另外一些关键字 [打印本页]
作者: yyz219 时间: 2022-7-19 00:29 标题: 求批处理:删除文本含关键字(整行),修改另外一些关键字
本帖最后由 yyz219 于 2022-7-19 13:31 编辑
现需要删除1.txt里面的,第2、3、4、5个“Windows Registry Editor Version 5.00”(整行)
修改1.txt里面的,第2、3、4、5个“.png”(依次为:.bmp .gif .jpeg .jpg)【希望编辑.bmp .gif .jpeg .jpg方便,最好是读取2.txt:.bmp .gif .jpeg .jpg】
其它内容跟1.txt保持一致
1.txt:- Windows Registry Editor Version 5.00
-
- [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\OpenWithList]
- "a"="iexplore.exe"
- "MRUList"="cebdfagij"
- "b"="小Q画笔.exe"
- "d"="ACDSeeQV.exe"
- "e"="chrome.exe"
- "f"="mspaint.exe"
- "g"="搜索.exe"
- "h"="Honeyview32.exe"
- "i"="复制到剪切板.exe"
- "j"="DllHost.exe"
- "c"="Imagine64.exe"
-
- Windows Registry Editor Version 5.00
-
- [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\OpenWithList]
- "a"="iexplore.exe"
- "MRUList"="cebdfagij"
- "b"="小Q画笔.exe"
- "d"="ACDSeeQV.exe"
- "e"="chrome.exe"
- "f"="mspaint.exe"
- "g"="搜索.exe"
- "h"="Honeyview32.exe"
- "i"="复制到剪切板.exe"
- "j"="DllHost.exe"
- "c"="Imagine64.exe"
-
- Windows Registry Editor Version 5.00
-
- [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\OpenWithList]
- "a"="iexplore.exe"
- "MRUList"="cebdfagij"
- "b"="小Q画笔.exe"
- "d"="ACDSeeQV.exe"
- "e"="chrome.exe"
- "f"="mspaint.exe"
- "g"="搜索.exe"
- "h"="Honeyview32.exe"
- "i"="复制到剪切板.exe"
- "j"="DllHost.exe"
- "c"="Imagine64.exe"
-
- Windows Registry Editor Version 5.00
-
- [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\OpenWithList]
- "a"="iexplore.exe"
- "MRUList"="cebdfagij"
- "b"="小Q画笔.exe"
- "d"="ACDSeeQV.exe"
- "e"="chrome.exe"
- "f"="mspaint.exe"
- "g"="搜索.exe"
- "h"="Honeyview32.exe"
- "i"="复制到剪切板.exe"
- "j"="DllHost.exe"
- "c"="Imagine64.exe"
-
- Windows Registry Editor Version 5.00
-
- [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\OpenWithList]
- "a"="iexplore.exe"
- "MRUList"="cebdfagij"
- "b"="小Q画笔.exe"
- "d"="ACDSeeQV.exe"
- "e"="chrome.exe"
- "f"="mspaint.exe"
- "g"="搜索.exe"
- "h"="Honeyview32.exe"
- "i"="复制到剪切板.exe"
- "j"="DllHost.exe"
- "c"="Imagine64.exe"
复制代码
作者: InterFrog 时间: 2022-7-19 01:01
第一次来批处理之家,就看到还有人在加班啊,哈哈哈
作者: InterFrog 时间: 2022-7-19 01:04
回复 2# InterFrog
我可以帮你试试看
作者: yyz219 时间: 2022-7-19 07:38
回复 3# InterFrog
谢谢先
作者: yyz219 时间: 2022-7-19 08:12
本帖最后由 yyz219 于 2022-7-19 10:00 编辑
编辑(跟主楼意思一样)
作者: flashercs 时间: 2022-7-19 13:04
- @echo off
- setlocal enabledelayedexpansion
- cd /d "%~dp0"
- @REM 文件类型
- set ext=.png .jpg .jpeg .bmp .gif
- @REM 注册表文件
- set regfile=1.txt
- (
- echo Windows Registry Editor Version 5.00
- echo.
- for %%A in (%ext%) do (
- echo [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\%%~A\OpenWithList]
- echo "a"="iexplore.exe"
- echo "MRUList"="cebdfagij"
- echo "b"="小Q画笔.exe"
- echo "d"="ACDSeeQV.exe"
- echo "e"="chrome.exe"
- echo "f"="mspaint.exe"
- echo "g"="搜索.exe"
- echo "h"="Honeyview32.exe"
- echo "i"="复制到剪切板.exe"
- echo "j"="DllHost.exe"
- echo "c"="Imagine64.exe"
- echo.
- )
- )>%regfile%
- endlocal
- pause
- exit /b
复制代码
作者: yyz219 时间: 2022-7-19 13:11
回复 6# flashercs
我试一试先 谢谢
作者: yyz219 时间: 2022-7-19 13:24
本帖最后由 yyz219 于 2022-7-19 13:32 编辑
回复 6# flashercs - echo "a"="iexplore.exe"
- echo "MRUList"="cebdfagij"
- echo "b"="小Q画笔.exe"
- echo "d"="ACDSeeQV.exe"
- echo "e"="chrome.exe"
- echo "f"="mspaint.exe"
- echo "g"="搜索.exe"
- echo "h"="Honeyview32.exe"
- echo "i"="复制到剪切板.exe"
- echo "j"="DllHost.exe"
- echo "c"="Imagine64.exe"
复制代码
上面的内容可能不是固定的(这个由1.txt决定)
要求仅仅:
删除第2、3、4、5个“Windows Registry Editor Version 5.00”(整行)
修改1.txt里面的,第2、3、4、5个“.png”(依次为:.bmp .gif .jpeg .jpg)
其它内容跟1.txt保存一致
作者: yyz219 时间: 2022-7-19 16:37
下面是结合大师:flashercs 的代码,自己拼凑而成的代码,可以实现我的要求(但是,可能不科学),请各位老师斧正- @echo off
- ::【导出的PNG注册表项】
- regedit /e "PNG注册表项.reg" "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\OpenWithList"
- ::【注册表文件转文本】
- type PNG注册表项.reg>159.txt
- ::【删除文本前3行】
- SET TxtDir="%~dp0"
- SET /A N=3
- CD /D %TxtDir%
- FOR /F "tokens=1 delims=" %%I IN ('DIR /A /B 159.txt') DO ((MORE +%N% "%%I">"%%I_")&(DEL /A /F /Q "%%I")&(REN "%%I_" "%%I"))
- ::****************************************************************
- ::【生成删除原来项的注册表文件】
- setlocal enabledelayedexpansion
- cd /d "%~dp0"
- ::【文件的后缀】
- set ext=.bmp .gif .jpeg .jpg .png
- (
- echo Windows Registry Editor Version 5.00
- echo.
- for %%A in (%ext%) do (
- (echo [-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\%%~A\OpenWithList]
- echo.)
- )
- )>>2.reg
- ::【根据159.txt生成注册表】
- for %%A in (%ext%) do (
- (echo [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\%%~A\OpenWithList]
- type "159.txt")
- )>>2.reg
- regedit.exe/s "2.reg" %【导入注册表】%
- del PNG注册表项.reg 2.reg 159.txt
- pause
- exit
复制代码
作者: InterFrog 时间: 2022-7-21 01:28
本帖最后由 InterFrog 于 2022-7-21 22:09 编辑
如果解决了问题,请务必好评,好评是一个初学者学下去的动力,嘿嘿
此代码解决的是你最开始的需求,同时兼顾了你最新的需求(新生成的不需要这一整行 “Windows Registry Editor Version 5.00”),代码如下(此为纯净版代码,带注释版代码附在最后):- @echo off
- setlocal enabledelayedexpansion
- type 0.txt > 1.txt
- echo. >> 1.txt
- for /f "tokens=*" %%i in (2.txt) do (
- echo. >> 1.txt
- for /f "skip=2 tokens=*" %%j in (0.txt) do (
- set a=%%j
- set a=!a:.png=%%i!
- echo !a! >> 1.txt
- )
- )
- start 1.txt
- pause
复制代码
对了,2.txt文件的内容要求要这样每行只写一个后缀:
.bmp
.gif
.jpeg
.jpg
0.txt的内容就是你最先的那样的:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\OpenWithList]
"a"="iexplore.exe"
"MRUList"="cebdfagij"
"b"="小Q画笔.exe"
"d"="ACDSeeQV.exe"
"e"="chrome.exe"
"f"="mspaint.exe"
"g"="搜索.exe"
"h"="Honeyview32.exe"
"i"="复制到剪切板.exe"
"j"="DllHost.exe"
"c"="Imagine64.exe"
楼主你好,那天晚上在这里注册账号之后,就随便看了看,然后就看到你的贴子,说要试试帮你解决的,后面因为工作忙忘记回复你了,所以我还是按照你最开始的要求做的,同时也兼顾了你最新的要求。
带详细注释版代码:- @REM 关闭回显
- @echo off
- REM 变量延迟坏境,开启后局部变量的使用要用!xxx!而不是%xxx%
- setlocal enabledelayedexpansion
- REM 先将0.txt的内容覆盖到1.txt
- type 0.txt > 1.txt
- REM 将一行空行追加到1.txt中
- echo. >> 1.txt
- REM 逐行遍历2.txt
- for /f "tokens=*" %%i in (2.txt) do (
- REM 将一行空行追加到1.txt中
- echo. >> 1.txt
- REM 忽略首2行(忽略的2行是:第1行是"Windows Registry Editor Version 5.00",
- REM 第2行是"空白行"),然后逐行遍历0.txt
- for /f "skip=2 tokens=*" %%j in (0.txt) do (
- REM 将每行内容赋值给a
- set a=%%j
- REM 用%%i替换a中的".png"(a中没有就不会进行替换),然后赋值给a
- set a=!a:.png=%%i!
- REM 将最新的a变量追加到1.txt,注意局部变量a的使用要用!a!而不是%a%
- echo !a! >> 1.txt
- )
- )
- REM 打开生成的1.txt
- start 1.txt
- REM 暂停
- pause
复制代码
作者: yyz219 时间: 2022-7-21 22:01
回复 10# InterFrog
辛苦了,我试一试先,谢谢
作者: InterFrog 时间: 2022-7-21 22:10
回复 11# yyz219
在原来的回答基础上增加了2.txt要求的格式,请看一下
作者: yyz219 时间: 2022-7-21 22:12
回复 12# InterFrog
提示:
系统找不到文件 2.txt。
请按任意键继续. . .
作者: yyz219 时间: 2022-7-21 22:27
回复 12# InterFrog
我自行补上2.txt以后也没有输出我需要的内容
作者: ZDG0000 时间: 2022-7-22 01:00
水个贴
13245879
作者: InterFrog 时间: 2022-7-22 10:16
回复 14# yyz219
2.txt文件的内容要写东西啊,就是你说的要根据填写的来替换.png,2.txt要求要这样每行只写一个后缀:
.bmp
.gif
.jpeg
.jpg
作者: yyz219 时间: 2022-7-22 11:37
回复 15# ZDG0000
这个应该是违反版规的,去编辑一下吧
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |