|
namejm
荣誉版主
       batch fan
积分 5226
发帖 1737
注册 2006-3-10 来自 成都
状态 离线
|
|
2007-5-17 21:14 |
|
|
lxmxn
版主
       
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
2 楼』:
感谢 namejm 兄的原创,在工作这么忙的情况下还可以顾及论坛,实感欣慰。
经过短暂的测试发现没有任何输出错误。
[ Last edited by lxmxn on 2007-5-17 at 11:16 PM ]
|
|
2007-5-17 22:44 |
|
|
ieutk
初级用户
 
积分 107
发帖 48
注册 2006-11-30
状态 离线
|
|
2007-5-17 23:25 |
|
|
zh159
金牌会员
     
积分 3687
发帖 1467
注册 2005-8-8
状态 离线
|
|
2007-5-18 00:11 |
|
|
bjsh
银牌会员
    
积分 2000
发帖 621
注册 2007-1-1
状态 离线
|
『第
5 楼』:
以前也写过类似的:
和namejm兄的差不多;
不过没考虑过某一行都是空格的情况;
最后一句是抄namejm的;
echo.%var%的用法实在妙极.
@echo off
for /f "tokens=1 delims=" %%a in ('findstr /n .* test.txt') do set "var=%%a" & call :change
goto :eof
:change
set "var=%var:^=^^%"
set "var=%var:>=^>%"
set "var=%var:<=^<%"
set "var=%var:&=^&%"
set "var=%var:|=^|%"
set "var=%var:*:=%"
echo.%var% 这个解决了"问题;
诸位也帮忙测试下;
|
|
2007-5-18 08:54 |
|
|
lxmxn
版主
       
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
6 楼』:
To bjsh:
测试发现点小问题,请看下面我的测试文本。
test.txt
Quote: | ~ ! @ # $ % ^ & * ( () " ok " No " <>nul
set ok=^ |
|
屏幕显示
|
|
2007-5-18 12:36 |
|
|
bjsh
银牌会员
    
积分 2000
发帖 621
注册 2007-1-1
状态 离线
|
『第
7 楼』:
唉;三个引号的问题啊;
就好像
echo fsdg"dsgsa"gds" >55.txt
不会写到55.txt里一样;
我在想想吧;
难道真得非写成不可见字符.
|
|
2007-5-18 12:53 |
|
|
ttyp
初级用户
 
积分 180
发帖 84
注册 2006-9-7
状态 离线
|
『第
8 楼』:
结果不对啊
aoueo
;euou%^>
::::aeui
:::E2uo alejou 3<o2io|
^aue||%ou
!aue!
!str!auoeu!ueo &&
ueyi^^^^aueuo2
=^
第一行“变成乱码,多了最后一行
|
|
2007-5-18 13:07 |
|
|
lxmxn
版主
       
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
9 楼』:
To ttyp:
第一行的 " 是楼主故意变成那个特殊字符的。
你的测试文本是不是复制楼主的测试文本啊?
我这里测试完全正常。
|
|
2007-5-18 13:15 |
|
|
ttyp
初级用户
 
积分 180
发帖 84
注册 2006-9-7
状态 离线
|
『第
10 楼』:
是复制的,第一行开始没看清楚。
但是最后多一行很奇怪
我的系统是W2K+SP4
|
|
2007-5-18 13:21 |
|
|
namejm
荣誉版主
       batch fan
积分 5226
发帖 1737
注册 2006-3-10 来自 成都
状态 离线
|
『第
11 楼』:
Quote: | Originally posted by bjsh at 2007-5-18 12:53:
唉;三个引号的问题啊;
就好像
echo fsdg"dsgsa"gds" >55.txt
不会写到55.txt里一样;
我在想想吧;
难道真得非写成不可见字符. |
|
经过测试,应该是引号为奇数个的时候才会有这种情况,这是 call 语句调用子过程的时候 echo 语句的一大缺陷,可能只有替换为其他字符才行。
顶楼的代码已经精简了部分语句,set "str=%~1" 完全没有必要存在,呵呵,我的思路复杂过头了。
[ Last edited by namejm on 2007-5-18 at 01:47 PM ]
|

尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。 |
|
2007-5-18 13:26 |
|
|
ttyp
初级用户
 
积分 180
发帖 84
注册 2006-9-7
状态 离线
|
『第
12 楼』:
哦,明白了,是我一直在测试P处理,注释了EXIT导致的
|
|
2007-5-18 13:27 |
|
|
bjsh
银牌会员
    
积分 2000
发帖 621
注册 2007-1-1
状态 离线
|
『第
13 楼』:
Quote: | Originally posted by namejm at 2007-5-18 01:26 PM:
经过测试,应该是引号为奇数个的时候才会有这种情况,这是 call 语句调用子过程的时候 echo 语句的一大缺陷,可能只有替换为其他字符才行。 ... |
|
是的;是奇数个的时候这样;
echo dsg^"sdgsad^"gdgasdg^" >5.txt
就可以了;
其实"也算特殊字符了;
重新修改一下
@echo off
set var=
for /f "delims=" %%a in ('findstr /n .* test.txt') do (
set "var=%%a"
call set "var=%%var:"=%%"
call :change
)
goto :eof
:change
set "var=%var:^=^^%"
set "var=%var:>=^>%"
set "var=%var:<=^<%"
set "var=%var:&=^&%"
set "var=%var:|=^|%"
set "var=%var:*:=%"
if not defined var echo. & goto :eof
call set "var=%%var:="%%"
echo.%var% 再测试看还有什么问题
|
|
2007-5-18 13:49 |
|
|
bjsh
银牌会员
    
积分 2000
发帖 621
注册 2007-1-1
状态 离线
|
『第
14 楼』:
Quote: | c:\>set "var=~ ! @ # $ % ^ & * ( () " ok " No " <>nul"
此时不应有 >。 |
|
Quote: | c:\>for /f "delims=" %a in (test.txt) do set "var=%a"
c:\>set "var=~ ! @ # $ % ^ & * ( () " ok " No " <>nul"
c:\>set var
var=~ ! @ # $ % ^ & * ( () " ok " No " <>nul |
|
test.txt内容
Quote: | ~ ! @ # $ % ^ & * ( () " ok " No " <>nul |
|
发现两者的不同了吗?
前者 显示 此时不应有 >
而后者只是利用for把那段字符转换为%a再赋值给var;就不会报错了;
有意思啊;
|
|
2007-5-18 14:08 |
|
|
namejm
荣誉版主
       batch fan
积分 5226
发帖 1737
注册 2006-3-10 来自 成都
状态 离线
|
『第
15 楼』:
当引号为奇数个的时候,echo的结果不会有什么错误,但是,当引号个数为偶数个的时候,就会出错了。解决的办法是 echo.%var% 改为 call echo.%%var%%,但是这样一来,如果测试内容为 ~ ! @ # $ % ^ & * ( () " ok " No " a>a 的时候,会把最后一个引号之后的所有内容都抛弃掉,原因暂时不明。
————————————————————————————————
以上言论属于使用的测试代码有误,导致结论出错。
[ Last edited by namejm on 2007-5-18 at 02:53 PM ]
|

尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。 |
|
2007-5-18 14:09 |
|