Board logo

标题: [文本处理] 【已解决】批处理删除 某一段代码 [打印本页]

作者: lovekix    时间: 2023-7-19 10:28     标题: 【已解决】批处理删除 某一段代码

本帖最后由 lovekix 于 2023-7-19 19:13 编辑

比如我有一段代码
]通过批处理  能删除吗?  每次都手动查找 然后删除太麻烦
  1. <Application Id="WindowsBackup" Executable="WindowsBackupClient.exe" EntryPoint="WindowsBackup.App" uap10:TrustLevel="mediumIL" uap10:RuntimeBehavior="windowsApp">
  2. <uap:VisualElements DisplayName="ms-resource:WindowsBackup/Resources/WindowsBackupHostName" Description="ms-resource:WindowsBackup/Resources/WindowsBackupDescription" Square150x150Logo="WindowsBackup\Assets\MedTile.png" Square44x44Logo="WindowsBackup\Assets\AppList.png" BackgroundColor="transparent">
  3. ...
  4. </uap:VisualElements>
  5. <Extensions>
  6. <uap:Extension Category="windows.protocol">
  7. <uap:Protocol Name="ms-windowsbackup" ReturnResults="optional"/>
  8. </uap:Extension>
  9. <uap3:Extension Category="windows.appExtension">
  10. <uap3:AppExtension Name="com.microsoft.windows.extensionpackage" Id="WindowsBackup" DisplayName="Extension Metadata">
  11. <uap3:Properties>
  12. <PackageAliases>
  13. <PackageAlias>WindowsBackupAlias</PackageAlias>
  14. </PackageAliases>
  15. </uap3:Properties>
  16. </uap3:AppExtension>
  17. </uap3:Extension>
  18. <uap3:Extension Category="windows.appExtension">
  19. <uap3:AppExtension Name="com.microsoft.windows.app.windowsbackup" Id="WindowsBackup" DisplayName="Extension Metadata"/>
  20. </uap3:Extension>
  21. <uap3:Extension Category="windows.appExtension">
  22. <uap3:AppExtension Name="com.microsoft.windows.extensions.xaml" Id="WindowsBackup" DisplayName="Microsoft Windows Extensions">
  23. <uap3:Properties>
  24. <Classes>
  25. <WindowsBackupControl>WindowsBackup.WindowsBackupControl</WindowsBackupControl>
  26. </Classes>
  27. <MetadataProviders>
  28. <Provider>WindowsBackup.XamlMetaDataProvider</Provider>
  29. </MetadataProviders>
  30. <ResourceDictionaries>
  31. <ResourceDictionary>WindowsBackup.WindowsBackupResources</ResourceDictionary>
  32. </ResourceDictionaries>
  33. </uap3:Properties>
  34. </uap3:AppExtension>
  35. </uap3:Extension>
  36. </Extensions>
  37. <uap:ApplicationContentUriRules>
  38. <uap:Rule Type="include" Match="https://login.live.com/"/>
  39. <uap:Rule Type="include" Match="https://signup.live.com/"/>
  40. <uap:Rule Type="include" Match="https://account.live.com/"/>
  41. </uap:ApplicationContentUriRules>
  42. </Application>
复制代码

作者: lovekix    时间: 2023-7-19 10:37

  1. <Application Id="WindowsBackup" Executable="WindowsBackupClient.exe" EntryPoint="WindowsBackup.App" uap10:TrustLevel="mediumIL" uap10:RuntimeBehavior="windowsApp">
复制代码
到</Application> 结束
中间有什么不重要
作者: Batcher    时间: 2023-7-19 12:00

回复 2# lovekix
  1. sed "/<Application Id=\x22WindowsBackup\x22 Executable=\x22WindowsBackupClient.exe\x22 EntryPoint=\x22WindowsBackup.App\x22 uap10:TrustLevel=\x22mediumIL\x22 uap10:RuntimeBehavior=\x22windowsApp\x22>/,/<\/Application>/d" 1.txt > 2.txt
复制代码
命令行工具 sed.exe 下载地址:
http://bcn.bathome.net/s/tool/index.html?key=sed
作者: 77七    时间: 2023-7-19 12:18

本帖最后由 77七 于 2023-7-19 12:19 编辑
  1. @echo off
  2. rem http://bbs.bathome.net/redirect.php?goto=findpost&ptid=12042&pid=76476
  3. set "str1=<Application Id="WindowsBackup" Executable="WindowsBackupClient.exe" EntryPoint="WindowsBackup.App" uap10:TrustLevel="mediumIL" uap10:RuntimeBehavior="windowsApp">"
  4. set "str2=</Application>"
  5. setlocal enabledelayedexpansion
  6. set "str1=!str1:"="""!"
  7. for /f "tokens=1 delims=:" %%a in ('findstr /nxr /c:"!str1!" /c:"!str2!" "1.txt"') do if defined start (set end=%%a) else (set start=%%a)
  8. (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "1.txt"') do (
  9. if %%a lss !start! echo=%%b
  10. if %%a gtr !end! echo=%%b
  11. ))>"2.txt"
  12. endlocal
  13. pause
复制代码

作者: lovekix    时间: 2023-7-19 16:27

回复 3# Batcher


    不会用啊  

文件名是 appxmanifest.xml
作者: lovekix    时间: 2023-7-19 16:38

回复 4# 77七


    不行啊   只是把  里面的内容全部复制出来了
  没有 删除  那一段代码
作者: 77七    时间: 2023-7-19 16:51

回复 6# lovekix


我测试是正常的。

将代码中两处 1.txt 改为你的文件名,再试试。
  如果不行 ,你把原文件传到网盘,发上来看看。
作者: lovekix    时间: 2023-7-19 17:05

回复 7# 77七


    https://wwrj.lanzoue.com/iCpgY12wzlyb
作者: 77七    时间: 2023-7-19 17:27

回复 8# lovekix


   你的实际文本与1楼提供的文本不符,1楼的文本行前缺少两个制表符,另外文本中存在多个 </Application>。先修改如下,有问题再说。
  1. @echo off
  2. rem http://bbs.bathome.net/redirect.php?goto=findpost&ptid=12042&pid=76476
  3. set "str1= <Application Id="WindowsBackup" Executable="WindowsBackupClient.exe" EntryPoint="WindowsBackup.App" uap10:TrustLevel="mediumIL" uap10:RuntimeBehavior="windowsApp">"
  4. set "str2= </Application>"
  5. setlocal enabledelayedexpansion
  6. set "str1=!str1:"="""!"
  7. for /f "tokens=1 delims=:" %%a in ('findstr /nxr /c:"!str1!" "appxmanifest.xml"') do set start=%%a
  8. for /f "tokens=1 delims=:" %%a in ('findstr /nxr /c:"!str2!" "appxmanifest.xml"') do (
  9. if %%a gtr !start! (
  10. set end=%%a
  11. goto :next
  12. )
  13. )
  14. :next
  15. (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "appxmanifest.xml"') do (
  16. if %%a lss !start! echo=%%b
  17. if %%a gtr !end! echo=%%b
  18. ))>"appxmanifest-2.xml"
  19. endlocal
  20. pause
复制代码

作者: lovekix    时间: 2023-7-19 17:52

回复 9# 77七


   

!丢了
作者: 77七    时间: 2023-7-19 17:57

回复 10# lovekix


  
  1. @echo off
  2. rem http://bbs.bathome.net/redirect.php?goto=findpost&ptid=12042&pid=76476
  3. set "str1= <Application Id="WindowsBackup" Executable="WindowsBackupClient.exe" EntryPoint="WindowsBackup.App" uap10:TrustLevel="mediumIL" uap10:RuntimeBehavior="windowsApp">"
  4. set "str2= </Application>"
  5. rem setlocal enabledelayedexpansion
  6. set "str1=%str1:"="""%"
  7. for /f "tokens=1 delims=:" %%a in ('findstr /nxr /c:"%str1%" "appxmanifest.xml"') do set start=%%a
  8. for /f "tokens=1 delims=:" %%a in ('findstr /nxr /c:"%str2%" "appxmanifest.xml"') do (
  9. if %%a gtr %start% (
  10. set end=%%a
  11. goto :next
  12. )
  13. )
  14. :next
  15. (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "appxmanifest.xml"') do (
  16. set "str=%%b"
  17. setlocal enabledelayedexpansion
  18. if %%a lss %start% echo=!str!
  19. if %%a gtr %end% echo=!str!
  20. endlocal
  21. ))>"appxmanifest-2.xml"
  22. endlocal
  23. pause
复制代码

作者: lovekix    时间: 2023-7-19 19:13

回复 11# 77七

谢谢
    刀工完美
  1. @echo off
  2. rem http://bbs.bathome.net/redirect.php?goto=findpost&ptid=12042&pid=76476
  3. set "str1= <Application Id="WindowsBackup" Executable="WindowsBackupClient.exe" EntryPoint="WindowsBackup.App" uap10:TrustLevel="mediumIL" uap10:RuntimeBehavior="windowsApp">"
  4. set "str2= </Application>"
  5. rem setlocal enabledelayedexpansion
  6. set "str1=%str1:"="""%"
  7. for /f "tokens=1 delims=:" %%a in ('findstr /nxr /c:"%str1%" "appxmanifest.xml"') do set start=%%a
  8. for /f "tokens=1 delims=:" %%a in ('findstr /nxr /c:"%str2%" "appxmanifest.xml"') do (
  9. if %%a gtr %start% (
  10. set end=%%a
  11. goto :next
  12. )
  13. )
  14. :next
  15. (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "appxmanifest.xml"') do (
  16. set "str=%%b"
  17. setlocal enabledelayedexpansion
  18. if %%a lss %start% echo=!str!
  19. if %%a gtr %end% echo=!str!
  20. endlocal
  21. ))>"appxmanifest-2.xml"
  22. endlocal
  23. pause
复制代码

作者: lovekix    时间: 2023-7-28 09:43

本帖最后由 lovekix 于 2023-7-28 10:24 编辑

回复 11# 77七






https://im.ge/i/9D1sha

无法打开    (15行的)
(for /f "tokens=1* delims=:" %%a in ('findstr /n .* "appxmanifest.xml"') do
加了两行命令   解决了
  1. @echo off
  2. xcopy "C:\Windows\SystemApps\MicrosoftWindows.Client.CBS_cw5n1h2txyewy\appxmanifest.xml" "%cd%\" /k /c /q /r /y
  3. rem http://bbs.bathome.net/redirect.php?goto=findpost&ptid=12042&pid=76476
  4. set "str1= <Application Id="WindowsBackup" Executable="WindowsBackupClient.exe" EntryPoint="WindowsBackup.App" uap10:TrustLevel="mediumIL" uap10:RuntimeBehavior="windowsApp">"
  5. set "str2= </Application>"
  6. rem setlocal enabledelayedexpansion
  7. set "str1=%str1:"="""%"
  8. for /f "tokens=1 delims=:" %%a in ('findstr /nxr /c:"%str1%" "C:\Windows\SystemApps\MicrosoftWindows.Client.CBS_cw5n1h2txyewy\appxmanifest.xml"') do set start=%%a
  9. for /f "tokens=1 delims=:" %%a in ('findstr /nxr /c:"%str2%" "C:\Windows\SystemApps\MicrosoftWindows.Client.CBS_cw5n1h2txyewy\appxmanifest.xml"') do (
  10. if %%a gtr %start% (
  11. set end=%%a
  12. goto :next
  13. )
  14. )
  15. :next
  16. (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "appxmanifest.xml"') do (
  17. set "str=%%b"
  18. setlocal enabledelayedexpansion
  19. if %%a lss %start% echo=!str!
  20. if %%a gtr %end% echo=!str!
  21. endlocal
  22. ))>"C:\Windows\SystemApps\MicrosoftWindows.Client.CBS_cw5n1h2txyewy\appxmanifest.xml"
  23. endlocal
  24. del "appxmanifest.xml"
  25. pause
复制代码

作者: Zhanggli    时间: 2023-9-1 15:13

请教:我也是需要删除某一段代码,有点不同的是只是删除str1至str2之间代码包括str1,而str2不删除,多个文件需要处理
作者: Zhanggli    时间: 2023-9-1 15:14

T1
G00 Y48.62 F7500
G01 X9.8 F5000
G00 Y52.17 F7500
G01 X-15 F5000
G00 Y201.0 F7500
G01 X23.2 F3000
G01 X-15 F3000
G00 Y239.62 F7500
G01 X9.8 F5000
G00 Y243.17 F7500
G01 X-15 F5000
T2
G00 X-15 Y241.4 F7500
G01 X25 F5000
G01 X-15 F5000
G00 Y50.4 F7500
G01 X25.0 F5000
G01 X-15 F5000
M05
M30
作者: Zhanggli    时间: 2023-9-1 15:17

现在需要删除的是T2-M05之间的代码,包括T2行,但是不包括M05,不同文件这两者之间的代码会有不同行数,另外在M05后面加一个指令M55,多个文件需要同样处理,我总是循环不起来。
作者: hfxiang    时间: 2023-9-1 15:52

回复 15# Zhanggli
可用第3方工具sed( http://bcn.bathome.net/tool/4.9/sed.exe
  1. sed -e"/T2/,/M05/{/M05/!d;s/M05/M05\nM55/;}" 1.txt>2.txt
复制代码

作者: qixiaobin0715    时间: 2023-9-1 15:55

本帖最后由 qixiaobin0715 于 2023-9-1 17:21 编辑
  1. @echo off
  2. for /f "delims=" %%x in ('dir /b /a-d *.txt') do (
  3.     set n=0
  4.     (for /f "delims=" %%i in ('type "%%x"') do (
  5.         if "%%i"=="T2" set n=
  6.         if defined n echo,%%i
  7.         if "%%i"=="M05" (
  8.             set n=0
  9.             echo,%%i
  10.             echo,M55
  11.         )
  12.     ))>"New-%%x"
  13. )
  14. pause
复制代码

作者: Zhanggli    时间: 2023-9-1 16:51

感谢qixiaobin,真的很简洁明了,再次感谢
作者: Zhanggli    时间: 2023-9-1 16:52

我之前的思路也是和前面的定义了两个字符串变量来处理反倒没搞好
作者: Zhanggli    时间: 2023-9-1 16:58

不过如果是多个文件同样处理的话需要引入临时文件变量temp吧?
作者: 77七    时间: 2023-9-1 16:59

回复 16# Zhanggli


  
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  3. call :1 "%%i"
  4. )
  5. pause & exit
  6. :1
  7. setlocal
  8. for /f "tokens=1* delims=:" %%a in ('findstr /nxr /c:"M05" /c:"T2" "%~1"') do (
  9. if not defined s (
  10. set s=%%a
  11. ) else (
  12. set e=%%a
  13. )
  14. )
  15. (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%~1"') do (
  16. if %%a lss %s% (
  17. echo=%%b
  18. ) else if %%a equ %e% (
  19. echo=%%b
  20. echo=M55
  21. ) else if %%a gtr %e% (
  22. echo=%%b
  23. )
  24. ))>$
  25. move /y $ "%~1"
  26. endlocal
  27. exit /b
复制代码

作者: qixiaobin0715    时间: 2023-9-1 17:21

回复 21# Zhanggli
已修改
作者: Zhanggli    时间: 2023-9-1 21:15

太赞了,我试了好几次循环都没成功,底子还是太弱了,再次感谢
作者: lovekix    时间: 2023-11-30 20:15

回复 9# 77七


    微软总把 制表符  换成  空格   (有时候 9个   有时候8个)

有时候  还在会把
<Application Id="WindowsBackup" Executable="WindowsBackupClient.exe" EntryPoint="WindowsBackup.App" uap10:TrustLevel="mediumIL" uap10:RuntimeBehavior="windowsApp">"

替换成
<Application Id="WindowsBackup" Executable="WindowsBackupClient.exe" EntryPoint="WindowsBackup.App" uap10/4:TrustLevel="mediumIL" uap10/4:RuntimeBehavior="windowsApp">"

还有其他办法吗?
作者: 77七    时间: 2023-11-30 21:19

回复 25# lovekix


   请把出现问题的文件传上来,看看是什么原因。
作者: lovekix    时间: 2023-12-1 08:48

本帖最后由 lovekix 于 2023-12-1 08:52 编辑

回复 26# 77七


https://wwrj.lanzouu.com/i461Y1ggo9zc
作者: 77七    时间: 2023-12-1 14:52

本帖最后由 77七 于 2023-12-1 14:54 编辑

回复 27# lovekix


  1. @echo off
  2. set "str1=<Application Id="WindowsBackup" Executable="WindowsBackupClient.exe" EntryPoint="WindowsBackup.App" uap10[/]*[4]*:TrustLevel="mediumIL" uap10[/]*[4]*:RuntimeBehavior="windowsApp">"
  3. set "str2=</Application>"
  4. set "str1=%str1:"="""%"
  5. for /f "tokens=1 delims=:" %%a in ('findstr /nxr /c:"[ ]*%str1%" "appxmanifest.xml"') do set start=%%a
  6. for /f "tokens=1 delims=:" %%a in ('findstr /nxr /c:"[ ]*%str2%" "appxmanifest.xml"') do (
  7. if %%a gtr %start% (
  8. set end=%%a
  9. goto :next
  10. )
  11. )
  12. :next
  13. (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "appxmanifest.xml"') do (
  14. if %%a lss %start% echo=%%b
  15. if %%a gtr %end% echo=%%b
  16. ))>"appxmanifest-2.xml"
  17. pause
复制代码

作者: lovekix    时间: 2023-12-1 17:57

回复 28# 77七

这行代码  可以用* 代替后面的吗?
  1. set "str1=<Application Id="WindowsBackup" Executable="WindowsBackupClient.exe" EntryPoint="WindowsBackup.App" uap10[/]*[4]*:TrustLevel="mediumIL" uap10[/]*[4]*:RuntimeBehavior="windowsApp">"
复制代码
  1. set "str1=<Application Id="WindowsBackup" Executable="WindowsBackupClient.exe" EntryPoint="WindowsBackup.App"*>"
复制代码

作者: 77七    时间: 2023-12-1 18:24

回复 29# lovekix


   .*
前面加个.
作者: terse    时间: 2023-12-1 19:24

本帖最后由 terse 于 2023-12-1 19:39 编辑

直接删除节点呢 修改把文件名传进去
  1. @set @n=0;/* & echo off & cscript -nologo -e:jscript "%~0" "appxmanifest.xml" "appxmanifest2.xml"&pause & exit  */
  2. var xml = new ActiveXObject("Msxml2.DOMDocument");
  3. xml.load(WScript.Arguments(0));
  4. var node = xml.selectSingleNode("//Application[@Id='WindowsBackup' and @Executable='WindowsBackupClient.exe' and @EntryPoint='WindowsBackup.App']");
  5. if (node != null) {
  6.     node.parentNode.removeChild(node);
  7. }
  8. xml.save(WScript.Arguments(1));
复制代码

作者: lovekix    时间: 2023-12-2 07:57

回复 31# terse


    cscript v 不是内部命令
作者: terse    时间: 2023-12-2 08:48

回复 32# lovekix
怎么后面跟个v? 将代码里cscript改为cscript.exe试,或者检测一下,
  1. for %%i in (cscript.exe) do echo;文件路径 %%~$PATH:i
复制代码

作者: lovekix    时间: 2023-12-2 08:51

回复 33# terse


    PE 下没有cscript。exe 这个文件
作者: lovekix    时间: 2023-12-2 08:55

回复 28# 77七


    如果想多删除
<Application Id="WebExperienceHost" Executable="WebExperienceHostApp.exe" EntryPoint="WebExperienceHostApp.App"
这段

需要 怎么弄?
作者: terse    时间: 2023-12-2 11:59

回复 34# lovekix
PE下没测试,35楼是想是删除两节吗
  1. @echo off
  2. set "str1=<Application Id="WindowsBackup" Executable="WindowsBackupClient.exe" EntryPoint="WindowsBackup.App" uap10/*[0-9]*:TrustLevel="mediumIL" uap10/*[0-9]*:RuntimeBehavior="windowsApp">"
  3. set "str2=<Application Id="WebExperienceHost" Executable="WebExperienceHostApp.exe" EntryPoint="WebExperienceHostApp.App""
  4. set "str1=%str1:"=\"%"
  5. set "str2=%str2:"=\"%"
  6. for /f "delims=:" %%a in ('findstr /ibnrc:"[ ]*%str1%"   /c:"[ ]*%str2%" "appxmanifest.xml"') do set _%%a=1
  7. set "flag="
  8. (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "appxmanifest.xml"') do (
  9.      if defined flag (
  10.            for /f %%i in ("%%b") do  if "%%i" == "</Application>" set "flag="
  11.      ) else if defined _%%a (
  12.            set "flag=1"
  13.      ) else echo %%b
  14. ))>new_appxmanifest.xml
  15. pause
复制代码

作者: lovekix    时间: 2023-12-2 16:03

本帖最后由 lovekix 于 2023-12-2 16:24 编辑

回复 36# terse


要是  以后删除第三段  代码 需要怎么弄?

还有 莫名多出  2个   ECHO 处于关闭状态

作者: terse    时间: 2023-12-2 19:03

回复 37# lovekix
可以将echo %%b改成echo;%%b试一下

另外,要加关键词 第4至8行这样改
  1. set "str3=<Application Id="FESearchUI" Executable="FESearchHost.exe" EntryPoint="CortanaUI.App">"
  2. set "str1=%str1:"=\"%"
  3. set "str2=%str2:"=\"%"
  4. set "str3=%str3:"=\"%"
  5. for /f "delims=:" %%a in ('findstr /ibnrc:"[ ]*%str1%"   /c:"[ ]*%str2%"  /c:"[ ]*%str3%" "appxmanifest.xml"') do set _%%a=1
复制代码





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