Board logo

标题: for中的delims=可以是字符窜吗? [打印本页]

作者: 26933062     时间: 2007-5-25 23:42    标题: for中的delims=可以是字符窜吗?

我想用for命令这样行吗?

@echo off
set "var=333ps555psssword=123 456 789"
for /f "tokens=1* delims=psssword" %%i in ("%var%") do set str=%%i&set num=%%j
echo %str%   %num%
pause

我的本意是
设 str=333ps555
num==123 456 789
可结果却是
str=333
num=555psssword=123 456 789


为什么我运行的结果是以 p 或 s 为分隔符的啊?而不是以psssword为分隔符?


[ Last edited by 26933062 on 2007-8-13 at 12:13 AM ]
作者: bjsh     时间: 2007-5-26 00:07
delims=psssword
将会以这些字母做为分割符;不只是p和s,w,o,r,d也将被用做分割符;

delims不能将字符串做为分割符;
作者: 26933062     时间: 2007-5-26 00:10
哦.原来这样,就是说只能以一个单一的字母或符号作分隔符 是吗?

[ Last edited by 26933062 on 2007-8-11 at 05:59 AM ]
作者: lxmxn     时间: 2007-5-26 00:36


  Quote:
Originally posted by 26933062 at 2007-5-26 00:10:
哦.原来这样,就是说只能以一个单一的字母或符号作分隔符 是吗?

for 命令的 delims 选项是这样的。

要以 psssword 这个字串为分隔符,我仅仅知道 gawk 这个工具可以,在论坛搜索一下可以找到下载地址。
C:\>echo 333ps555psssword=123 456 789|gawk "BEGIN{FS=\"psssword\"}{str=$1;num=$2;print \"str=\"str\"\nnum=\"num}"
str=333ps555
num==123 456 789

作者: 26933062     时间: 2007-5-26 00:40
哦.谢谢了,用工具就不用了,......
主要是学批处理,,,,
作者: lxmxn     时间: 2007-5-26 00:49


  Quote:
Originally posted by 26933062 at 2007-5-26 00:40:
哦.谢谢了,用工具就不用了,......
主要是学批处理,,,,

有时用一些工具可以解决很多问题的,但我不强求。

虽然 for 命令的 delims 选项不支持字串的分割,但是如果想达到你的目的,换一个思路或许也可以:
@echo off
set "var=333ps555psssword=123 456 789"
set "var=%var:psssword=_%"
for /f "tokens=1* delims=_" %%a in ("%var%") do set str=%%a&set num=%%b
echo str=%str%
echo num=%num%
pause

作者: sunshine217     时间: 2007-6-2 21:25
dd
作者: baikaifang     时间: 2007-6-2 21:53
各位大侠们呀,为什么都不写命令的注释啊,让我们这些菜鸟看了一头雾水呀,里面用到的一些怪子符,网上也找不到用法啊.结果看了等于没看.不知道每条命令具体的含义,遇到别的问题的时候就不能举一反三.唉
作者: qingfushuan     时间: 2007-6-4 11:57


  Quote:
Originally posted by baikaifang at 2007-6-2 09:53 PM:
各位大侠们呀,为什么都不写命令的注释啊,让我们这些菜鸟看了一头雾水呀,里面用到的一些怪子符,网上也找不到用法啊.结果看了等于没看.不知道每条命令具体的含义,遇到别的问题的时候就不能举一反三.唉

雾里看花啊,3D图片就是这样看出来的,坚持看上3个月,你就清楚了,我就是去年12

月开始雾里看花的啊,现在看3D图片了
作者: step2step     时间: 2007-6-4 15:05
前面看懂了,后面是天书
作者: huyujuen121     时间: 2007-8-3 08:28
是啊都是天书。。
作者: slore     时间: 2007-8-3 10:12
3D图片几秒就可以了啊
作者: sting     时间: 2007-8-8 10:02
^_^ 难懂啊
作者: 1112yuhua     时间: 2007-8-16 01:26
lxmxn版主果然高,把password用_来替换了。
作者: liuyun20     时间: 2007-10-18 22:56    标题: 顶了!!

set "var=%var:psssword=_%",把password用_来替换了.
学习了.
作者: tobisome     时间: 2007-10-19 19:46
双感叹号与双%号的区别是什么呢
for的do里面好像看到的是!n!
其他的像echo看到的是%n%

这个可以讲讲吗
作者: lxmxn     时间: 2007-10-19 19:47
看置顶FAQ。
作者: handan     时间: 2007-10-19 20:56
tokens=1* 这个是什么意思 我没看懂
作者: moniuming     时间: 2008-1-25 00:38
还是版主高明啊,佩服
作者: komafd2     时间: 2008-2-22 16:15
自己试了一下,把word当成分隔符
@ echo off
set "a=333ps555psssword=123 456 789"
for /f "tokens=1* delims=word" %%i in ("%a%") do set b=%%i&set num=%%j
echo %b:~0,-4%  %num%
pause
作者: nanhui112     时间: 2008-3-7 21:52
这个问题值得研究研究...就是当 delims=字符串时 以什么样的方式分割.
作者: lovelymorning     时间: 2008-3-8 14:24
善用变量,多用 偷梁换柱
作者: huahua0919     时间: 2008-3-8 15:01
delims=字符串时 举例:
如果字符串是abc
则起到分割作用的分割符有
a,b,c,ab,ac,bc,abc
学过排列组合的就知道不管字符的长度为多少,分割符总是为:
Cn1+Cn(n-1)..........Cnn,就有这么多的可能!
作者: nanhui112     时间: 2008-3-8 22:56
只能主观这么认为 我的意思是字符串在被分割的字符串中有什么特点时  已什么样的方式分割
我也是实验知道的 列如若delims=中的字符串具有唯一性时  会以第整串字母作为分割符  否则 会以第一个字符作为分割符 不够准确 望大虾指出!
作者: bjsh     时间: 2008-3-9 15:41


  Quote:
Originally posted by nanhui112 at 2008-3-8 10:56 PM:
只能主观这么认为 我的意思是字符串在被分割的字符串中有什么特点时  已什么样的方式分割
我也是实验知道的 列如若delims=中的字符串具有唯一性时 ...

"delims=abcedef"

无论 那种情况 delims 的分割 是以 等号 后的每一个字符作为分隔符的

只是在 所谓的 "唯一性" 时 看起来 像 以整个字符串为分隔符而已
作者: wjmm     时间: 2008-7-1 10:03
经测试,还可以用一个汉字作分隔符,
我的理解,分隔符是一个字节

  Quote:
Originally posted by 26933062 at 2007-5-26 12:10 AM:
哦.原来这样,就是说只能以一个单一的字母或符号作分隔符 是吗?

[ Last edited by 26933062 on 2007-8-11 at 05:59 AM ]


作者: zh159     时间: 2008-7-2 08:55


  Quote:
Originally posted by wjmm at 2008-7-1 10:03:
经测试,还可以用一个汉字作分隔符,
我的理解,分隔符是一个字节

正如 3 楼说的,只能以一个单一的字母或符号作分隔符,而不是一个字节(一个汉字是两个字节)
作者: wjmm     时间: 2008-7-2 15:16
经测试,分隔符可以是一个汉字
比如,有一文本文件test.txt,其内容如下
-------------------------------------------------------------------------------
111111你2222222你3333333333你4444444
55555你66666你7777777777777777777你88888
9999你00000你aaaaaaaa你bbbbbb
---------------------------------------------------------------------------------

批处理代码
@echo off
FOR /F "tokens=1,3,4 delims=你" %%a in (test.txt) do @echo %%a %%b %%c
pause

执行该批处理后,可以发现汉字“你”确实可以作为分隔符

字节"

  Quote:
Originally posted by zh159 at 2008-7-2 08:55 AM:

正如 3 楼说的,只能以一个单一的字母或符号作分隔符,而不是一个字节(一个汉字是两个字节)

[ Last edited by wjmm on 2008-7-3 at 11:30 AM ]
作者: zzybq     时间: 2009-10-29 12:16
确实很好,学习了
作者: Evangel     时间: 2009-10-31 15:26
楼上的兄弟挖坟能力好强……看了半天,才知道是2年前的帖子了……不过也很经典