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

[文本处理] [已解决]请教:怎么用批处理删除当前目录下所有文本文件中指定字符串所在行之后的内容

本帖最后由 liziyunabcd 于 2019-11-9 21:12 编辑

请教:怎么用批处理删除当前目录下所有文本文件中指定字符串所在行之后的内容(包括字符串所在行)?
  1. @echo off
  2. set fx=*.txt
  3. set "sx=指定字符串"
  4. for /f "delims=" %%i in ('dir/b %fx%')do (
  5. echo %%i
  6. set "n="
  7. for /f "delims=:" %%j in ('findstr/nc:"%sx%" "%%i"')do set/a n=%%j
  8. if defined n (
  9. call more +%%n%% "%%i">temp.yky
  10. move temp.yky "%%i")
  11. )
  12. pause
复制代码
这是一个高手写的,但他这个是删除字符之前的(我要删除之后的)。

有高手能改一下吗?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 1# liziyunabcd


test1.bat
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "fx=*.txt"
  4. set "sx=指定字符串"
  5. for /f "delims=" %%i in ('dir /b /a-d %fx%')do (
  6.     echo %%i
  7.     call :CutFile "%%i"
  8.     move "temp.yky" "%%i"
  9. )
  10. pause
  11. goto :eof
  12. :CutFile
  13. (for /f "delims=" %%j in ('type "%~1"') do (
  14.     echo,%%j
  15.     set "str=%%j"
  16.     if "!str:%sx%=!" neq "%%j" (
  17.         goto :eof
  18.     )
  19. ))>"temp.yky"
  20. goto :eof
复制代码
1

评分人数

    • liziyunabcd: 完美解决,老大出手,效果非凡。技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 1# liziyunabcd


test2.bat
  1. sed -i "0,/指定字符串/!d" *.txt
复制代码
命令行工具 sed.exe 下载地址
http://bcn.bathome.net/s/tool/index.html?key=sed
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 flashercs 于 2019-11-9 14:59 编辑
  1. @echo off
  2. cd /d "%~dp0"
  3. set fx=*.txt
  4. set "sx=!!"
  5. for /f "delims=" %%i in ('dir /b %fx%')do (
  6. echo %%i
  7. set "n="
  8. for /f "delims=:" %%j in ('findstr /nc:"%sx%" "%%i"') do set /a n=%%j
  9. setlocal EnableDelayedExpansion
  10. if defined n (
  11. (
  12.   for /L %%k in (!n!,-1,1) do (
  13.     set input=
  14.     set /p "input="
  15.     echo,!input!
  16.   )
  17. )<"%%i" >>tmp.zxy
  18. move /y tmp.zxy "%%i"
  19. )
  20. endlocal
  21. )
  22. pause
  23. exit /b
复制代码
1

评分人数

微信:flashercs
QQ:49908356

TOP

回复 2# Batcher 老大出手,几乎完美解决,老大,那“指定字符串”怎么删除呢,就是包括字符串也要删除。

TOP

回复 3# Batcher 老大这个工具就是删除“指定字符串”的工具是吧,感谢老大,老大出手,什么事都能搞字,真感谢这么好的平台,这么好的老大···

TOP

回复 4# flashercs


    感谢大牛,和老大的一样的效果,虽然长了两行,说明真是自己改的,感谢感谢大牛

TOP

回复 6# liziyunabcd


    sed.exe 是个功能强大的命令行工具,大部分文本处理操作都可以用它来实现。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表