找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 37288|回复: 5

[文本处理] 【已解决】批处理如何以指定字符分割未知长度的字符串

[复制链接]
发表于 2009-4-20 19:43:25 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-9-29 00:20 编辑

我已经知道使用for能分割并提取字符串里面的元素:
例子:
@echo off
set str=c d e f g h i j k l m n o p q r s t u v w x y z
echo 当前硬盘的分区有:
for %%i in (%str%) do if exist %%i: echo %%i:
pause
这里使用了for语句默认使用空格作为分割符号。

如果分割符不是空格的话,就无法使用上面的for来分割了:
set str=c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
这时候可以使用for /F 分割字符串,但是不同的是,必须使用"tokens=1-24"指定分割完的部分,如果不指定,默认会返回第一个分割完的部分。

问题是:如果不知道字符串里面有多少个分割部分,怎么把分割部分逐一显示出来呢?

[ 本帖最后由 zhushjbathhome 于 2009-4-22 20:28 编辑 ]

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢主动给标题标注[已解决]字样

查看全部评分

发表于 2009-4-20 20:19:49 | 显示全部楼层
for 默认的分割符除了空格还有逗号
你的问题至少有2个解决办法
第一、若确定被分割的部分没有空格和逗号,则可以先把\替换为空格,再for即可。
第二、递归
:
  1. @echo off
  2. set str=c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
  3. call :loop "%str%"
  4. pause
  5. :loop
  6. for /f "tokens=1* delims=" %%a in ("%~1") do (
  7.    echo %%a
  8.    if not "%%b"=="" call :loop "%%b"
  9. )
  10. goto :EOF
复制代码

评分

参与人数 1PB +2 收起 理由
nanhui + 2 学习。。

查看全部评分

发表于 2009-4-21 09:35:42 | 显示全部楼层
如果有分隔的字符串在31列内,还可采用以下方法:
  1. @echo off
  2. for /l %%a in (1,1,31) do call,set "str=%%str%%-%%a"
  3. :lp
  4. set /a n+=1
  5. for /f "tokens=%n% delims=-" %%a in ("%str%") do if "%%a" neq "" echo %%a&goto lp
  6. pause>nul
复制代码
 楼主| 发表于 2009-4-21 19:34:51 | 显示全部楼层
长知识了,3Q!
  1. @echo off
  2. set "str=c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z"
  3. :lp
  4. set /a n+=1
  5. for /f "tokens=%n% delims=" %%a in ("%str%") do (
  6. if "%%a" neq "" (
  7. echo %%a>>log.txt
  8. goto lp
  9. )
  10. )
复制代码
感觉4楼的方法比较简单。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 23:39 , Processed in 0.015396 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表