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

[文本处理] 批处理怎样批量删除某个字符串之后的内容?

我的某个文件夹和子文件夹有很多TXT文件,里面的内容都是“document.write('*******************************'); ”这样子的,但最近“ ');  ”这个标记的下一行都多出了一个字符,有些是中文,有些是其他字符。现在想批量处理一下所有包含“ ');   ”的TXT文件,把“ ');   ”之后的内容全部删除,之前的内容保留,批处理该怎么写呢?

回复bluewing009

你的这个只能指定某个文本,但我想要删除的是那个文件夹及子文件夹下的所有文本的内容。而那些文本内容的格式是:
  1. document.write(' 你的这个只能指定某个文本,但我想要删除的是那个文件夹及子文件夹下的文本内容。<p>而那些文本内容的格式是你的这个只能指定某个文本,但我想要删除的是那个文件夹及子文件夹下的文本内容。而那些文本内容的格式是<br> ');
复制代码
而我要删除的是"  '); "下一行的那个“删”字或者其他字符。



以顶楼数据为例,如果那个“删”字或者其他字符的下一行还有其他内容,也需要删掉吗?

如果“删”字或者其他字符的下一行还有其他内容,也需要删除。

[ 本帖最后由 luo8039 于 2011-2-23 06:40 编辑 ]

我的想法:  用变量替换将');  换成一个特殊的,然后利用 for  dlims= 提取

不过没有看的很懂LZ的描述.....
“标记的下一行都多出了一个字符” 既然确定是一个  那么 偏移  :~0,-1  可以么?
“下一行”是指后面的还是 另一行? “ 把“ ');   ”之后的内容全部删除”......?
是我理解不够还是前后矛盾......

a.txt:
  1. 前面是
  2. 随便写的
  3. 充字数
  4. document.write('充字数');这些不要?
  5. 这个是下一行s
复制代码
去掉后面的:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%i in (a.txt) do (
  4.     set str=%%i
  5.     echo !str!|findstr "');">nul
  6.     if !errorlevel!==0 (
  7.         set str=!str:'^);=◎!
  8.         for /f "delims=◎ tokens=1" %%m in ("!str!") do echo %%m'^);
  9.     ) else echo !str!
  10. )
  11. pause
复制代码


PS:不知道系统抽什么疯...for 里的findstr总是不给力

[ 本帖最后由 bluewing009 于 2011-2-22 09:32 编辑 ]

TOP

你的这个只能指定某个文本,但我想要删除的是那个文件夹及子文件夹下的所有文本的内容。而那些文本内容的格式是:

  1. document.write(' 你的这个只能指定某个文本,但我想要删除的是那个文件夹及子文件夹下的文本内容。<p>而那些文本内容的格式是你的这个只能指定某个文本,但我想要删除的是那个文件夹及子文件夹下的文本内容。而那些文本内容的格式是<br> ');
复制代码


而我要删除的是"  '); "下一行的那个“删”字或者其他字符。

[ 本帖最后由 luo8039 于 2011-2-22 10:34 编辑 ]

TOP

每个文件可能出现多处多余字符吗?如果只有一处,总在文件末尾吗?可以删除只有一个字符的行吗?
建议给出更详细的例子,以便分析

TOP

  1. @echo off
  2. for /f "delims=" %%i in ('dir /a-d /b /s *.txt') do (
  3.       for /f "delims=" %%j in ('findstr "')" %%i') do (
  4.             echo %%j>>abc
  5.       )
  6.       move abc %%i
  7. )
  8. pause
复制代码

TOP

以顶楼数据为例,如果那个“删”字或者其他字符的下一行还有其他内容,也需要删掉吗?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /r %%i in (*.txt) do (
  3.         set flag=
  4.         for /f "usebackq delims=" %%a in (` type "%%i"^&del "%%i"`) do (
  5.                 if not defined flag echo %%a>>"%%~fi"
  6.                 echo %%a|findstr "');">nul&&set flag=1
  7.         )
  8. )
复制代码

把这个批处理放到当前目录应该可以。

[ 本帖最后由 weichenxiehou 于 2011-2-23 14:24 编辑 ]
1

评分人数

    • Batcher: 请编辑自己的帖子,把代码放到code标签里面 ...PB -2
看得多说得多,远比不上写得多。

TOP

根据楼主的描述猜测,就是要删除这些txt文件的未行,代码如下:
  1. @echo off
  2. for /r %%a in (*.txt) do (
  3.      cd.>tem&set "str="
  4.     for /f "usebackq delims=" %%b in ("%%a") do if defined str echo !str!>>tem&set "str=%%a"
  5.     del /q "%%a"&ren tem "%%~nia"
  6. )
  7. del /q tem
复制代码
***共同提高***

TOP

通用点的:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /r %%a in (*.txt) do (
  3.      cd.>tem
  4.       for /f "usebackq delims=" %%b in ("%%a") do (
  5.             set "str=%%a"
  6.             if not defined flag echo !str!>>temp
  7.             if "!str:~,-3!" equ "');" set "flag=a"
  8.       )
  9.       del /q "%%a" ren temp "%%~nia"
  10. )
  11. del /q tem
复制代码
***共同提高***

TOP

只有一处么?既然这个字后面都可以去掉,那我也出个主意:
  1. @echo off
  2. for %%z in (a.txt) do for /f "delims=:" %%o in ('findstr /o "^删$" a.txt') do set /a z=%%z,o=%%o
  3. fsutil file setzerodata offset=%o% length=%z% a.txt
复制代码
或者
  1. @echo off
  2. (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
复制代码

TOP

还有个尚不成熟的思路:
先((echo 开始)&findstr /v "^删$")>tmp.txt
然后再fc a.txt b.txt

TOP

返回列表