Board logo

标题: for语句中怎么将%作为分隔符(已解决) [打印本页]

作者: jinrich     时间: 2006-12-16 04:48    标题: for语句中怎么将%作为分隔符(已解决)

@echo off
for /f "tokens=1 delims=% " %%a in (222.txt) do echo %%a>>2222.txt
pause
222.txt里的内容如下:
0|60|0|100.00%|0.00%|17.32%|14.57%|55.64%|8.14|18.14|0.02|16.35|16.19|83.51|26%
执行出错,看不懂……
起始我就是想把文件中的%去掉,用for执行不成功

不好意思,是我把自己的内容写的太不全引起大家的争执,,只是为了说明问题,就没写的太详细,不好意

[ Last edited by jinrich on 2006-12-15 at 11:16 PM ]
作者: jinrich     时间: 2006-12-16 05:14
难道%就做不成分隔符号,我在unix里也无法实现
作者: tianzizhi     时间: 2006-12-16 05:26
一个%不行,用两个%就行了,
@echo off
for /f "tokens=1 delims=%%" %%a in (222.txt) do echo %%a>>2222.txt
pause
作者: ccwan     时间: 2006-12-16 05:39
除非你不想要第一个%后面的字符,否则代码不对。
作者: a9319751     时间: 2006-12-16 05:52
@echo off
for /f "tokens=1-6 delims=%%" %%a in (222.txt) do echo %%a%%b%%c%%d%%e%%f>>2222.txt
pause
作者: tianzizhi     时间: 2006-12-16 05:54


  Quote:
Originally posted by ccwan at 2006-12-16 05:39:
除非你不想要第一个%后面的字符,否则代码不对。

你没测试过不要乱下定论,谁说不对, 我想要后面的这样也对.
222.txt内容为:
0|60|0|100.00%|0.00%|17.32%|14.57%|55.64%|8.14|18.14|0.02|16.35|16.19|83.51|26%

@echo off
for /f "tokens=1 delims=%% " %%a in (222.txt) do echo %%a
pause
显示:0|60|0|100.00

@echo off
for /f "tokens=1,2 delims=%% " %%a in (222.txt) do echo %%a %%b
pause
显示:0|60|0|100.00 |0.00

@echo off
for /f "tokens=1,2,3,4,5,6 delims=%% " %%a in (222.txt) do echo %%a %%b %%c %%d %%e %%f
pause
显示:
0|60|0|100.00 |0.00 |17.32 |14.57 |55.64 |8.14|18.14|0.02|16.35|16.19|83.51|26
作者: jinrich     时间: 2006-12-16 05:55
谢谢达人,完成了
作者: ccwan     时间: 2006-12-16 06:01
我不经过测试不会乱说的。
请试试下面的代码:
@echo off&setlocal enabledelayedexpansion
for /f %%a in (222.txt) do (
            set str=%%a
            set str=!str:%%=!
            >>2222.txt echo !str!
)
pause

作者: lxmxn     时间: 2006-12-16 06:41

  插一句,楼上的代码不够严谨,如果222.txt里面有空格或者水平制表符的话,for只能取到空格前面的字符。建议加上"delims="。

作者: ccwan     时间: 2006-12-16 06:44
谢谢lxmxn兄,当时只顾达到效果,确实考虑不周全,多谢提点!
作者: tianzizhi     时间: 2006-12-16 06:44
@echo off&setlocal enabledelayedexpansion
for /f %%a in (222.txt) do (
            set str=%%a
            set str=!str:%%=!
            >>2222.txt echo !str!
)
pause
我测试后结果为:
0|60|0|100.00|0.00|17.32|14.57|55.64|8.14|18.14|0.02|16.35|16.19|83.51|26
没什么错,我不知道你所谓的代码不对是什么,请你说清楚一下你说的会出现错的地方在哪里
作者: lxmxn     时间: 2006-12-16 06:47

  Re tianzizhi :

  把下面的内容作为222.txt的内容,再试试?
0|60|0|100.00%| 0.00%|17.32%|14 .57%|55.64%|8.14|18.14|0.02|16.35|16.19|83.51|26%

作者: tianzizhi     时间: 2006-12-16 06:59


  Quote:
Originally posted by lxmxn at 2006-12-16 06:47:

  Re tianzizhi :

  把下面的内容作为222.txt的内容,再试试?
[code]
0|60|0|100.00%| 0.00%|17.32%|14 .57%|55.64%|8.14|18.14|0.02|16.35|16.19|83.51|26%
...

lxmxn,你可能误会了,我讲的是ccwan
说我三楼回答在某些地方会错,
『第 3 楼』:  
一个%不行,用两个%就行了,
@echo off
for /f "tokens=1 delims=%%" %%a in (222.txt) do echo %%a>>2222.txt
pause
『第 4 楼』:  
除非你不想要第一个%后面的字符,否则代码不对。

我不清楚他说的代码不对是指什么,然后他贴出你看的那个代码,我又测试一下,没什么错,
对于你就指的222.txt内容里面有空格当然要加delims=了,
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in (222.txt) do (
            set str=%%a
            set str=!str:%%=!
            >>2222.txt echo !str!
)
pause
测试结果为:
0|60|0|100.00| 0.00|17.32|14 .57|55.64|8.14|18.14|0.02|16.35|16.19|83.51|26
也没什么错啊,还是请ccwan就一下他所说的错是什么,我想知道.
作者: ccwan     时间: 2006-12-16 07:06
呵呵,
222.txt内容为:
0|60|0|100.00%|0.00%|17.32%|14.57%|55.64%|8.14|18.14|0.02|16.35|16.19|83.51|26%

@echo off
for /f "tokens=1 delims=%% " %%a in (222.txt) do echo %%a
pause
显示:0|60|0|100.00
结果并非楼主所要,当然不对了,当时情况就是那样啊!
作者: lxmxn     时间: 2006-12-16 07:07

  哦,误会了。不好意思。

作者: tianzizhi     时间: 2006-12-16 07:15
而我所说只是怎么把%作为分隔符,而不是怎么把%去掉,我说的方法没有什么错的吧.
大家知道怎么回事就行了,不吵了.
作者: ccwan     时间: 2006-12-16 07:21
我求知欲很强,但是一个脾气很好的人,并不计较这些的。论坛里大家都是朋友。^_^
作者: tianzizhi     时间: 2006-12-16 07:30
我这两天心情也有点不好,见到不顺的就想顶两句,请你别太在意,和气为好.
不过我是因为在;
http://www.cn-dos.net/forum/viewthread.php?tid=25647&fpage=1
看到你们的回答才对你有诚见的,楼主本是好心问一下问题,却被你们这么说一通(有个人除外),以后还敢来论坛吗,想必楼主也很难过,在这里论友就是上帝,和商品经济顾客是上帝一样,
我只是替那位楼主打抱平.希望大家对新来的论友好一点,才能让论坛发展更好.

[ Last edited by tianzizhi on 2006-12-16 at 07:39 AM ]
作者: ccwan     时间: 2006-12-16 07:33
呵呵,说实话,我经常那么干的。吃饭走了就拔掉,一般很少有人想到,就用不了机子^_^
作者: ccwan     时间: 2006-12-16 07:36
还有,我一直强调我不是高手,并没有自大。谢谢,我的演讲完了。
作者: hxuan999     时间: 2006-12-16 07:49
这样吵也可以增进感情呀.^&^...
3楼的方法就是正确的.用两个%就可以在FOR中做为分隔符.
1楼的代码只输出了%分隔后第一个内容,既然要用%作分隔符,那就不会是只输出第一项的内容吧,所以我想5楼才会说:

  Quote:
除非你不想要第一个%后面的字符,否则代码不对。

另外还有一点就是for /f "tokens=1 delims=%% 中的delims=%% "",两个%%后面的空格要注意了,如果你想同时用空格作分隔符的化可以有,否则直接加引号,中间不要有空格.

[ Last edited by hxuan999 on 2006-12-15 at 07:50 PM ]
作者: tbs198400     时间: 2007-7-12 17:21
学习了!你们太厉害了!