![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-05 06:45 |
共 48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 解析某个字符串,并输出分隔后的各子字符串 |
| 可打印版本 1,178 / 7 |
| 第1楼 qdcr | 发表于 2006-06-30 15:55 |
| 初级用户 发帖 32 积分 120 | |
|
解析某个字符串,并输出分隔后的各子字符串 请教大家:
如下的一个功能需求: 解析字符串: QQ,c:\program files\QQ|MSN,c:\program files\MSN|messager,c:\program files\messager 以"|"字符作为分隔符,分隔后的字符: QQ,c:\program files\QQ MSN,c:\program files\MSN messager,c:\program files\messager 我的问题: set V_productInstalloc="QQ,c:\program files\QQ|MSN,c:\program files\MSN|messager,c:\program files\messager" for /f "tokens=1,2 delims=|" %%i in ("%V_productInstalloc%") do ( echo %%i ) 在V_productInstalloc中保存的工具名及其安装目录数不定,上例中为3个,而要想将每个子串都进行输出的话,需要用: echo %%i echo %%j echo %%k 矛盾在于,这里必须明确知道子串的个数。 请问:如何输出字符串 V_productInstalloc(子串个数不定)的每一个子串? 谢谢 |
|
| 第2楼 namejm | 发表于 2006-06-30 23:01 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
在CMD中,不能解析某些特定的符号,比如管道符号|、重定向符号>、>>等,所以,你的代码运行的时候会出错,不知道你是不是真正地测试过了。所以,建议用其他符号分隔字符串。
暂时还没想到解决的办法,期待高手出招。 |
|
| 第3楼 namejm | 发表于 2006-06-30 23:19 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
想起在弄我的文件备份器的时候,对输入的日期进行判断的需求和本例有相似之处,稍加修改后能顺利解决楼主的问题,前提是要对分隔符号作改动。本例中把分隔符号设置为斜杠符号"/":
|
|
| 第4楼 3742668 | 发表于 2006-07-01 09:56 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
在写批处理脚本的时候,尽量养成能用引号就用引号的习惯。因为对付无处不在的特殊字符,空格,比较有效的方法就是用引号包起来。 |
|
| 第5楼 namejm | 发表于 2006-07-01 10:07 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
版主高明,pf。
能不能把for %%i in (%*) do echo %%~i中的%*符号讲一下,一直弄不明白这两个符号表达的意思是什么。 |
|
| 第6楼 wydos | 发表于 2006-07-01 10:56 |
| 中级用户 发帖 117 积分 304 | |
|
call帮助中有介绍:
C:\Documents and Settings\lzy>call/? 从批处理程序调用另一个批处理程序。 CALL [drive:][path]filename [batch-parameters] batch-parameters 指定批处理程序所需的命令行信息。 如果命令扩展名被启用,CALL 会如下改变: CALL 命令现在将卷标当作 CALL 的目标接受。语法是: CALL:label arguments 一个新的批文件上下文由指定的参数所创建,控制在卷标被指定 后传递到语句。您必须通过达到批脚本文件末两次来 "exit" 两次。 第一次读到文件末时,控制会回到 CALL 语句的紧后面。第二次 会退出批脚本。键入 GOTO /?,参看 GOTO : EOF 扩展名的描述, 此描述允许您从一个批脚本返回。 另外,批脚本文本参数参照(%0、%1、等等)已如下改变: 批脚本里的 %* 指出所有的参数(如 %1 %2 %3 %4 %5 ...) 批参数(%n)的替代已被增强。您可以使用以下语法: %~1 - 删除引号("),扩充 %1 %~f1 - 将 %1 扩充到一个完全合格的路径名 %~d1 - 仅将 %1 扩充到一个驱动器号 %~p1 - 仅将 %1 扩充到一个路径 %~n1 - 仅将 %1 扩充到一个文件名 %~x1 - 仅将 %1 扩充到一个文件扩展名 %~s1 - 扩充的路径指含有短名 %~a1 - 将 %1 扩充到文件属性 %~t1 - 将 %1 扩充到文件的日期/时间 %~z1 - 将 %1 扩充到文件的大小 %~$PATH : 1 - 查找列在 PATH 环境变量的目录,并将 %1 扩充到找到的第一个完全合格的名称。如果环境 变量名未被定义,或者没有找到文件,此组合键会 扩充到空字符串 可以组合修定符来取得多重结果: %~dp1 - 只将 %1 扩展到驱动器号和路径 %~nx1 - 只将 %1 扩展到文件名和扩展名 %~dp$PATH:1 - 在列在 PATH 环境变量中的目录里查找 %1, 并扩展到找到的第一个文件的驱动器号和路径。 %~ftza1 - 将 %1 扩展到类似 DIR 的输出行。 在上面的例子中,%1 和 PATH 可以被其他有效数值替换。 %~ 语法被一个有效参数号码终止。%~ 修定符不能跟 %* 使用 |
|
| 第7楼 feifei0000 | 发表于 2006-07-08 17:09 |
| 初级用户 发帖 11 积分 42 | |
|
请问一下楼住,echo "%V_productInstalloc%"|find /i "/">nul 2>nul 是具体什么意思,尤其是 2>nul 为什么会有这个,这个有什么作用????
|
|
| 第8楼 slam | 发表于 2007-07-05 16:52 |
| 新手上路 发帖 7 积分 18 | |
Originally posted by 3742668 at 2006-7-1 09:56 AM: |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |