标题: [文本处理] 批处理怎样批量删除某个字符串之后的内容? [打印本页]
作者: luo8039 时间: 2011-2-22 05:34 标题: 批处理怎样批量删除某个字符串之后的内容?
我的某个文件夹和子文件夹有很多TXT文件,里面的内容都是“document.write('*******************************'); ”这样子的,但最近“ '); ”这个标记的下一行都多出了一个字符,有些是中文,有些是其他字符。现在想批量处理一下所有包含“ '); ”的TXT文件,把“ '); ”之后的内容全部删除,之前的内容保留,批处理该怎么写呢?
回复bluewing009
你的这个只能指定某个文本,但我想要删除的是那个文件夹及子文件夹下的所有文本的内容。而那些文本内容的格式是:- document.write(' 你的这个只能指定某个文本,但我想要删除的是那个文件夹及子文件夹下的文本内容。<p>而那些文本内容的格式是你的这个只能指定某个文本,但我想要删除的是那个文件夹及子文件夹下的文本内容。而那些文本内容的格式是<br> ');
- 删
复制代码
而我要删除的是" '); "下一行的那个“删”字或者其他字符。
以顶楼数据为例,如果那个“删”字或者其他字符的下一行还有其他内容,也需要删掉吗?
如果“删”字或者其他字符的下一行还有其他内容,也需要删除。
[ 本帖最后由 luo8039 于 2011-2-23 06:40 编辑 ]
作者: bluewing009 时间: 2011-2-22 08:44
我的想法: 用变量替换将'); 换成一个特殊的,然后利用 for dlims= 提取
不过没有看的很懂LZ的描述.....
“标记的下一行都多出了一个字符” 既然确定是一个 那么 偏移 :~0,-1 可以么?
“下一行”是指后面的还是 另一行? “ 把“ '); ”之后的内容全部删除”......?
是我理解不够还是前后矛盾......
a.txt:- 前面是
- 随便写的
- 充字数
- document.write('充字数');这些不要?
- 这个是下一行s
复制代码
去掉后面的:- @echo off
- setlocal enabledelayedexpansion
- for /f %%i in (a.txt) do (
- set str=%%i
- echo !str!|findstr "');">nul
- if !errorlevel!==0 (
- set str=!str:'^);=◎!
- for /f "delims=◎ tokens=1" %%m in ("!str!") do echo %%m'^);
- ) else echo !str!
- )
- pause
复制代码
PS:不知道系统抽什么疯...for 里的findstr总是不给力
[ 本帖最后由 bluewing009 于 2011-2-22 09:32 编辑 ]
作者: luo8039 时间: 2011-2-22 10:31
你的这个只能指定某个文本,但我想要删除的是那个文件夹及子文件夹下的所有文本的内容。而那些文本内容的格式是:
- document.write(' 你的这个只能指定某个文本,但我想要删除的是那个文件夹及子文件夹下的文本内容。<p>而那些文本内容的格式是你的这个只能指定某个文本,但我想要删除的是那个文件夹及子文件夹下的文本内容。而那些文本内容的格式是<br> ');
- 删
复制代码
而我要删除的是" '); "下一行的那个“删”字或者其他字符。
[ 本帖最后由 luo8039 于 2011-2-22 10:34 编辑 ]
作者: CrLf 时间: 2011-2-22 15:12
每个文件可能出现多处多余字符吗?如果只有一处,总在文件末尾吗?可以删除只有一个字符的行吗?
建议给出更详细的例子,以便分析
作者: lvsehuaxue 时间: 2011-2-22 19:06
- @echo off
- for /f "delims=" %%i in ('dir /a-d /b /s *.txt') do (
- for /f "delims=" %%j in ('findstr "')" %%i') do (
- echo %%j>>abc
- )
- move abc %%i
- )
- pause
复制代码
作者: Batcher 时间: 2011-2-22 21:53
以顶楼数据为例,如果那个“删”字或者其他字符的下一行还有其他内容,也需要删掉吗?
作者: weichenxiehou 时间: 2011-2-22 22:58
- @echo off&setlocal enabledelayedexpansion
- for /r %%i in (*.txt) do (
- set flag=
- for /f "usebackq delims=" %%a in (` type "%%i"^&del "%%i"`) do (
- if not defined flag echo %%a>>"%%~fi"
- echo %%a|findstr "');">nul&&set flag=1
- )
- )
复制代码
把这个批处理放到当前目录应该可以。
[ 本帖最后由 weichenxiehou 于 2011-2-23 14:24 编辑 ]
作者: batman 时间: 2011-2-23 09:57
根据楼主的描述猜测,就是要删除这些txt文件的未行,代码如下:- @echo off
- for /r %%a in (*.txt) do (
- cd.>tem&set "str="
- for /f "usebackq delims=" %%b in ("%%a") do if defined str echo !str!>>tem&set "str=%%a"
- del /q "%%a"&ren tem "%%~nia"
- )
- del /q tem
复制代码
作者: batman 时间: 2011-2-23 10:32
通用点的:- @echo off&setlocal enabledelayedexpansion
- for /r %%a in (*.txt) do (
- cd.>tem
- for /f "usebackq delims=" %%b in ("%%a") do (
- set "str=%%a"
- if not defined flag echo !str!>>temp
- if "!str:~,-3!" equ "');" set "flag=a"
- )
- del /q "%%a" ren temp "%%~nia"
- )
- del /q tem
复制代码
作者: CrLf 时间: 2011-2-23 17:35
只有一处么?既然这个字后面都可以去掉,那我也出个主意:- @echo off
- for %%z in (a.txt) do for /f "delims=:" %%o in ('findstr /o "^删$" a.txt') do set /a z=%%z,o=%%o
- fsutil file setzerodata offset=%o% length=%z% a.txt
复制代码
或者- @echo off
- (for /f "delims=:" %%n in ('findstr /n /e /c:" '^);" a.txt') do for /f "tokens=1* delims=:" %%a in ('findstr /n a.txt') do if %%a leq %%n echo %%b)>b.txt
复制代码
作者: CrLf 时间: 2011-2-23 17:40
还有个尚不成熟的思路:
先((echo 开始)&findstr /v "^删$")>tmp.txt
然后再fc a.txt b.txt
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |