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

[文本处理] [已解决]如何截取字符串中指定字符之前的几个/多个字符?

[复制链接]
发表于 2010-4-21 16:33:25 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2017-3-24 09:18 编辑

比如说变量N的值是123456789555115Aafdsafasfasfafafafawef
大写字母A的前后有多少个字符是不确定的,如果我想截取大写字母A之前的5个字母,有什么命令可以一步实现吗?或者用for麻烦点怎么实现?最好能够用命令一步实现的。}

[ 本帖最后由 lj84831253 于 2010-4-21 17:48 编辑 ]

评分

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

查看全部评分

发表于 2010-4-21 16:50:23 | 显示全部楼层
一步实现是不可能的
如果楼主要求的是以大写字母为分隔的话还会更麻烦,批处理区分大小写也很啰嗦。
 楼主| 发表于 2010-4-21 16:52:21 | 显示全部楼层
那如果不一步实现而且不是用之母分割,而是用&符号分割呢?多步怎么实现?
发表于 2010-4-21 17:05:14 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. set "n=abcdefgh&afdsafasfasfafafafawef"
  3. :han
  4. if not "!n:~%a%,1!"=="&" set/a a+=1&goto :han
  5. set/a a-=5
  6. echo.!n:~%a%^,5!
  7. pause
复制代码
发表于 2010-4-21 17:22:01 | 显示全部楼层
事先能知道变量n的长度不?,例如20个字符
  1. @echo off&setlocal enabledelayedexpansion
  2. set "n=abcdefgh&afdsafasfas"
  3. for /l %%i in (0,1,19) do if "!n:~%%i,1!"=="&" set/a m=%%i-5&call set "m=%%n:~!m!,5%%"
  4. echo.%m%
  5. pause
复制代码

评分

参与人数 1PB +5 收起 理由
Batcher + 5 乐于助人

查看全部评分

发表于 2010-4-21 17:25:54 | 显示全部楼层
始终认为逐字判断是万不得已才用的办法,因为效率太低
以左起的第一个大写字母 A 为分隔
  1. @echo off & setlocal enabledelayedexpansion
  2. set n=000a1234a1234a56789555115Aafdsafasfasfafafafawef
  3. set m=!n!
  4. set h=!n:A= !
  5. for %%a in (!h!) do (
  6.    set "m=!m:*%%a=!"
  7.    set "var=!var!a%%a"
  8.    if "!m:~0,1!"=="A" goto loop
  9. )
  10. :loop
  11. set "var=!var:~1!"
  12. echo !var:~-5!
  13. pause
复制代码

评分

参与人数 1PB +8 收起 理由
hanyeguxing + 8 赞一个

查看全部评分

 楼主| 发表于 2010-4-21 17:48:16 | 显示全部楼层
@echo off&setlocal enabledelayedexpansion
set "str=fjsfjslfsja123&12347284972"
set "var=!str:*&=!"
set "str=!str:%var%=!"
echo %str:~-6,-1%
pause>nul
这个也可以呵呵,谢谢你了!~
 楼主| 发表于 2010-4-21 17:54:40 | 显示全部楼层
@echo off&setlocal enabledelayedexpansion
set "str=fjsfjslfsja123&12347284972"
for /f "delims=&" %%a in ("!str!") do set "var=%%a"
echo !var:~-5!
pause>nul
 楼主| 发表于 2010-4-21 17:55:09 | 显示全部楼层
@echo off&setlocal enabledelayedexpansion
set "str=fjsfjslfsja123&12347284972"
:lp
set "var=!var!!str:~,1!"&set "str=!str:~1!"
if "!str:~,1!" neq "&" goto lp
echo !var:~-5!
pause>nul
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 12:51 , Processed in 0.021725 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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