标题: [文本处理] 【已解决】这个删除行的批处理BAT代码该怎么改? [打印本页]
作者: zhanglei1371 时间: 2014-2-27 08:39 标题: 【已解决】这个删除行的批处理BAT代码该怎么改?
本帖最后由 zhanglei1371 于 2014-2-27 11:05 编辑
我想处理一个文件夹下很多文本,删除关键词之后的行文本如:
5464
sdf
456546
45453
4845
545
aabbcc
54sd56f
sdfsd
.........
代码如下:- @echo off
- setlocal enabledelayedexpansion
- for %%i in (# $ $) do del %%i>nul 2>nul
- for /f "delims=" %%a in ('dir /a-d/b/s C:\12\*.txt') do (
- set "a=%%a"
- echo "a=%%a"
- pause
- for /f "delims=" %%i in (!a!) do (
- set i=%%i
- if "!i!" == "!i:aabbcc=!" (echo %%i) else goto :end
- )>>$
- :end
- type $
- )
- pause
复制代码
我的思路是:查找关键词所在行,一旦找到则直接跳出当前循环,但是总会跳出总循环而只能执行一次,所以,这个思路的问题在哪里?
恳请各位指点,谢谢!
作者: DAIC 时间: 2014-2-27 09:08
BAT的语法不允许在 for 循环内部定义标签
作者: zhanglei1371 时间: 2014-2-27 09:18
回复 2# DAIC
哦,原来如此,不过这个思路可有跳出的办法,该怎么写代码?或是其他但方法来解决这个问题
作者: DAIC 时间: 2014-2-27 09:37
回复 3# zhanglei1371 - @echo off
- for /f "delims=" %%a in ('dir /a-d /b /s C:\12\*.txt') do (
- pause
- call :Remove_Line "%%a"
- )
- pause
-
- :Remove_Line
- setlocal enabledelayedexpansion
- (for /f "usebackq delims=" %%i in (%1) do (
- set i=%%i
- if "!i!" == "!i:aabbcc=!" (
- echo,%%i
- ) else (
- goto :eof
- )
- ))> %1.new
- endlocal
- goto :eof
复制代码
作者: DAIC 时间: 2014-2-27 09:58
调用 sed.exe- sed "0,/aabbcc/!d" C:\12\*.txt
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |