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

[文本处理] 解决去除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个字符?

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

TOP

本帖最后由 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分钟内能刷新就行

外行业余,突然有个专业问题,确实太难了~摸索起来,时间不够用

TOP

回复 2# hfxiang


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

TOP

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

TOP

本帖最后由 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

TOP

回复 6# allen2023


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

TOP

返回列表