Board logo

标题: [文本处理] 解决去除BAT代码里的关键词行 [打印本页]

作者: allen2023    时间: 2023-11-12 21:46     标题: 解决去除BAT代码里的关键词行

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. REM set "f1=%~0"
  4. set "f1=%~f0"
  5. set "f2=%~dp0删除注释.txt"
  6. REM set str_eplce=""
  7. set matchStr=REM
  8. type %f1% > %f2%
  9. echo. >> %f2%
  10. echo ———————————————————————————————— >> %f2%
  11. for /f %%i in (%f1%) do (
  12. REM echo !a!
  13. set a=%%i
  14. REM set a=!a:^:^:=REM!
  15. REM find "REM" "!a!" && echo !a!&pause || echo !a! >> %f2%
  16. REM for /f "delims=:" %%i in ('findstr /v /r !a! "REM"') do echo !a! >> %f2%
  17. echo %%i | findstr %matchStr% >nul && echo %%i || echo %%i >> %f2%
  18. )
  19. start %f2%
  20. pause
  21. REM @echo off
  22. REM for /f "delims=" %%a in (b.txt) do set "%%a=0"
  23. REM (for /f "delims=" %%a in (a.txt) do (
  24.     REM if not defined %%a echo;%%a
  25. REM ))>c.txt
  26. pause
复制代码
新手的代码难免一堆注释,我想让rem标示的行删除掉,保留其余行,执行后的到的只有这
  1. @echo
  2. setlocal
  3. set
  4. set
  5. set
  6. type
  7. echo.
  8. echo
  9. for
  10. set
  11. echo
  12. )
  13. start
  14. pause
  15. pause
复制代码
最长能留8个字符?
作者: hfxiang    时间: 2023-11-12 22:01

回复 1# allen2023

针对楼主的样本,用第3方工具sed( http://bcn.bathome.net/tool/4.9/sed.exe )的实现结果,看是否符合楼主的要求?
  1. sed -r "/^[ \t]*REM/d;/^[ \t]*$/d" 1.bat>2.bat
复制代码

作者: allen2023    时间: 2023-11-12 22:40

本帖最后由 allen2023 于 2023-11-12 22:45 编辑

回复 2# hfxiang


    验证成功,ok。
如果纯批,写进代码,每次运行,自动生成一份,多好

————————————————
借此楼,总结下这两天注册论坛的问题,碰碰运气,抽时间摸索出来了跟帖发布出来


昨天注册的论坛账号,今天提问的两个问题应该每一位都有需求,没有找到答案;借此再求助一下。

1.局域网如何自动给每台电脑上传文件
http://www.bathome.net/redirect. ... 7794&pid=275821
不用看描述,直接实现也行
   分解下:
   - 手动或自动每台电脑开共享文件夹,同样的路径;
   - 自动给该路径新建一个文件夹;
   - 自动同步文件过去

2.让电脑只允许运行指定程序
http://www.bathome.net/thread-67800-1-1.html
bat怎么操控注册表来实现,知道的几个思路发链接里了

等高手来答疑,或发参考案例也行

个性化问题1个,教室用。
http://www.bathome.net/thread-67802-1-1.html
监控桌面,之前用的向日葵,想用bat的方法,主要是bat效率高方便
根据帖子4楼hlzj88的留言提示,搜了下确实有一些软件,功能太多了用不到,只要把10几台的屏幕同步到本地程序就行,响应不需要很及时,1分钟内能刷新就行

外行业余,突然有个专业问题,确实太难了~摸索起来,时间不够用
作者: allen2023    时间: 2023-11-12 22:53

回复 2# hfxiang


麻烦改一下, 生成后能去除掉下面这句,还有::这种类似的注释符,那就通用了
  1. sed -r "/^[ \t]*REM/d;/^[ \t]*$/d" %~f0>%~dp0%~n0_rem%~x0
复制代码

作者: Five66    时间: 2023-11-12 23:00

在包含注释的bat代码文件最开头加上一句
  1. @findstr /ivbrc:"[ ]*rem " /bc:"@findstr /ivbrc" "%~f0" >"%~dp0删除注释.txt"&pause&exit/b
复制代码

作者: allen2023    时间: 2023-11-13 10:07

本帖最后由 allen2023 于 2023-11-13 10:16 编辑

回复 5# Five66


    感谢,不懂原理,改成功了,可以把 ::行 也去除掉,这个论坛真是好!!
  1. @findstr /ivbrc:"[ ]*rem " /bc:"@findstr /ivbrc" "%~f0" >"%~dp0%~n0_r1%~x0"&pause&@findstr /ivbrc:"[ ]*::" /bc:"@findstr /ivbrc" "%~dp0%~n0_r1%~x0" >"%~dp0%~n0_r2%~x0"&pause&exit/b
复制代码
一点点小遗留问题:ansi 成了 utf-8
作者: Five66    时间: 2023-11-13 23:47

回复 6# allen2023


    原理就是:用 finstr 从 "~f0" 中查找不包含 注释 和 命令自身 的行到文件中
编码问题大概是你默认的编码吧,挺无解的,批处理的编码不能随心所欲,顶多就切换下代码页凑合一下




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