Board logo

标题: 如何删除文本里的 % 符号 [打印本页]

作者: amio     时间: 2008-6-1 09:47    标题: 如何删除文本里的 % 符号

如何删除文本里的 % 符号
作者: HAT     时间: 2008-6-1 10:10

change.exe "C:\test\a.txt" /from "%" /to null
change.exe
http://upload.cn-dos.net/img/427.zip
作者: amio     时间: 2008-6-1 10:20
可以

这个是什么东西  没用过  看资料 是什么终端
作者: HAT     时间: 2008-6-1 10:32
跟什么终端没多大关系吧?

  Quote:
CHANGE.EXE 是一个以命令行方式处理对文件的修改工具,目标文件可以是任意大小任意格式。可以一次执行30条命令!非常地高效。

一、基本格式:
change 源文件.txt /from “被替换的串” /to “替换串” /in “条件”

二、已知限制是它不支持长名,可能不认识一些windows下的特殊字符作文件名。对此,解决之道是以短文件名访问(例如:myfile~1.txt)。

三、详细功能列表:
⒈處理的文件不限大小,前提是磁盤上至少要有与目标文件等大的预留空间,用于临时存放其副本;
⒉不仅处理文本文件,也处理二进制文件;
⒊替入和换出的字符串长度可以不同;
⒋可以指定替换行为只在特定行发生,特定行的标志是有另一个指定的字符(串)出现,这个字符串还允许大小写敏感;
⒌可以同时执行多达30个修改指令;
⒍支持子目录;
⒎兼容dos/Unix/Mac 文本格式;
⒏输入输出字符串可以是文本的(Ascii),也可以是十六进制值或十进制值;
⒐替换速的特快;
⒑具有备份选项,以防源文件可能损坏;
⒒替换工作可以交互式进行(控制台);
⒓除命令行、控制台它还允许把多条指令组合编制为一个控制文件一次执行;
⒔可以使用布尔变量;
⒕源文件名支持通配符;
⒖"*"用在指定的被修改字符串时,表示由当前位置到行尾的整个子串;
⒗在指定目标字符串时,可以设定“列”,仅当字符位于此范围内时才发生替换;
⒘可以按文件属性排除某个文件不被处理;
⒙可以排除某些行不处理;
⒚按ESC可以中止处理进程。

四、如何指定参数
        当程序运行时,它将以如下三种方式读取参数:
        ⒈INI文件
        ⒉系统环境变量
        ⒊命令行
        先看最常用的命令行语法。
To/From/In规范:
FROM        被替换的文字
TO        用于替换的文字
TO        (可选)指定发生替换行为的特定行标志
举例,设test.txt文件包含如下两行:
The quick brown fox jumped over
the lazy brown dog.

我们输入:
change /from brown /to red /fox
则文件变为:
The quick red fox jumped over
the lazy brown dog.
即:有出现"fox"的那行"brown:被替换为"red",其它行不变。

如果所指定字符串包含空格或其他特殊字符,请用双引号,比如:
CHANGE test.TXT /FROM "my music" /TO "my video"

或者用十六进制字符处理特殊字符,如:
CHANGE test.TXT /FROM &H0D0A0D0A /TO &H0D0A
(删除多余的行)

设定列宽的例子:
change test.txt /from ok 5/10 /to no
只替换从第5列到第10列的ok 为 no,这个功能是按首字符认定位置的,比如有一个“ok”位于4,5列那么它不会被替换。

仅删除的例子:
change test.txt /from no /to null
(即:删除所有的no)

如果要忽略英文字母的大小写,使用参数 /I

与DOS类似,可以用参数 /s 处理所有子目录中文件的替换工作

替换指定行的例子:
change test.txt /from no /to re /lines 3-8 30-50
(即:只替换3到8行和30到50行的字符)

出于安全目的,该程序总要自动生成一个临时文件备份源文件,如果用 /N文件名 参数另指定一个输出文件,则没有临时文件输出。

要消除文件末尾多余的空格,可以用参数 /trim

使用布尔变量的例子:
CHANGE TEST.TXT /FROM Apple /TO Banana /IN (red OR brown) AND NOT Pear
将替换apple为banana,但所在行必须有red或brown出现,并且没有Pear出现

本程序的返回误码意义:
0        无错,有修改
1        无错,无修改
253        提前中止
254        内部错误
255        语法错


作者: amio     时间: 2008-6-1 10:34
发现 个问题   这个命令好像区分大小写    怎么能让它不区分大小写?
作者: amio     时间: 2008-6-1 10:36
如果要忽略英文字母的大小写,使用参数 /I
作者: HAT     时间: 2008-6-1 10:39
多看几遍帮助文档,呵呵。
作者: amio     时间: 2008-6-1 10:45
如果要删除
%a%\b\%c_d_e%
这样的字符  处理就变成
%a%%c_d_e%
作者: HAT     时间: 2008-6-1 10:59


  Quote:
Originally posted by amio at 2008-6-1 10:45 AM:
如果要删除
%a%\b\%c_d_e%
这样的字符  处理就变成
%a%%c_d_e%

是这个意思吗?
change.exe "C:\test\a.txt" /from "\b\" /to null

作者: amio     时间: 2008-6-1 11:10
不是   

你把 %a%\b\%c_d_e%  复制到文本文档里面  然后用命令

c:\CHANGE.EXE "C:\A.txt" /from "%a%\b\%c_d_e%" /to null

发现是没法全删除的
作者: HAT     时间: 2008-6-1 11:22


  Quote:
Originally posted by amio at 2008-6-1 11:10 AM:
不是   

你把 %a%\b\%c_d_e%  复制到文本文档里面  然后用命令

c:\CHANGE.EXE "C:\A.txt" /from "%a%\b\%c_d_e%" /to null

发现是没法全删除的

我这里测试一切正常:

作者: amio     时间: 2008-6-1 11:59
我不是在cmd窗口里    而是把这个命令放批处理文件里面了
作者: amio     时间: 2008-6-1 12:02
为什么用批处理 调用这个命令就不好使啊
作者: HAT     时间: 2008-6-1 12:37


  Quote:
Originally posted by amio at 2008-6-1 11:59 AM:
我不是在cmd窗口里    而是把这个命令放批处理文件里面了


@echo off
change.exe "C:\test\a.txt" /from \037a\037\b\\037c_d_e\037 /to null

作者: HAT     时间: 2008-6-1 12:39
因为批处理会认为%a%和%c_d_e%是两个变量,在执行change.exe之前就会对它们进行替换,所以导致change.exe无法正确工作。
作者: amio     时间: 2008-6-1 12:54
\037  就代表 % 了?
作者: HAT     时间: 2008-6-1 12:59
楼上正解
作者: amio     时间: 2008-6-1 13:06
你是怎么知道的啊

那批处理没有这方面的替代符吗
作者: amio     时间: 2008-6-1 13:11
我一开始用
findstr /I /V /G:x.txt xx.txt>xxx.txt   

但是 x.txt  里面的内容要是有 %  就不能删除了  

所以问怎么删除  %   符号

findstr /I /V /G:x.txt xx.txt>xxx.txt   
比较方便  把要删除的内容都放 x.txt 里  不知道 CHANGE.EXE 有没有类似的方法
作者: HAT     时间: 2008-6-1 17:16


  Quote:
Originally posted by amio at 2008-6-1 01:06 PM:
你是怎么知道的啊

那批处理没有这方面的替代符吗

我是听别人说的
批处理没听说

如果你想知道其它字符如何替换,可以google搜索“ASCII码对照表”。
作者: plp626     时间: 2008-6-1 17:27
楼主我不是给你回了吗?cmd处理特殊字符是很不擅长的,
sed s/[%]//g a.txt
作者: joyn     时间: 2008-6-1 19:44
用其它的工具的呀.....- -!
作者: amio     时间: 2008-6-1 20:38


  Quote:
Originally posted by plp626 at 2008-6-1 05:27 PM:
楼主我不是给你回了吗?cmd处理特殊字符是很不擅长的,
sed s/[%]//g a.txt

我也回复你了啊   我说我没看懂   试了几次也不好使
作者: WANKOILZ     时间: 2008-6-1 21:30
直接用变量的字符替换也行呢:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (1.txt) do (
set str=%%i
set str=!str:%%=!
echo !str!
)
pause

作者: plp626     时间: 2008-6-1 21:44


  Quote:
Originally posted by amio at 2008-6-1 08:38 PM:



我也回复你了啊   我说我没看懂   试了几次也不好使

你用的操作系统是?有没下载sed?
我 测试sed效率很高,
作者: amio     时间: 2008-6-2 14:46


  Quote:
Originally posted by plp626 at 2008-6-1 09:44 PM:


你用的操作系统是?有没下载sed?
我 测试sed效率很高,

下了 不是84KB 吗   我在CMD下执行的命令   XP系统
作者: HAT     时间: 2008-6-3 00:36


  Quote:
Originally posted by amio at 2008-6-2 02:46 PM:



下了 不是84KB 吗   我在CMD下执行的命令   XP系统

删除%a%\b\%c_d_e%
并把结果输出到b.txt
sed "s/%a%\\b\\%c_d_e%//g" a.txt>b.txt

作者: bat-zw     时间: 2008-6-3 01:00

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('type a.txt') do (
    set str=%%i&set str=!str:%%=!
    if not defined flag (
       echo !str!>a.txt&set flag=A
       ) else (
       echo !str!>>a.txt
    )
)
echo 搞定!
pause>nul
[ Last edited by zw19750516 on 2008-6-3 at 01:09 AM ]
作者: amio     时间: 2008-6-3 09:08


  Quote:
Originally posted by HAT at 2008-6-3 12:36 AM:

删除%a%\b\%c_d_e%
并把结果输出到b.txt
sed "s/%a%\\b\\%c_d_e%//g" a.txt>b.txt

如果不能用批处理调用sed的话很麻烦
作者: amio     时间: 2008-6-3 09:21


  Quote:
Originally posted by zw19750516 at 2008-6-3 01:00 AM:
[code]
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('type a.txt') do (
    set str=%%i&set str=!str:%%=!
    if not defined flag (
       echo !str!> ...

如果 要删除的是  %t   就会被替换成  echo 处于关闭状态

就是在这地方加个t
set str=%%i&set str=!str:%%t=!