标题: [文本处理] [已解决]如何截取字符串中指定字符之前的几个/多个字符? [打印本页]
作者: lj84831253 时间: 2010-4-21 16:33 标题: [已解决]如何截取字符串中指定字符之前的几个/多个字符?
本帖最后由 pcl_test 于 2017-3-24 09:18 编辑
比如说变量N的值是123456789555115Aafdsafasfasfafafafawef
大写字母A的前后有多少个字符是不确定的,如果我想截取大写字母A之前的5个字母,有什么命令可以一步实现吗?或者用for麻烦点怎么实现?最好能够用命令一步实现的。}
[ 本帖最后由 lj84831253 于 2010-4-21 17:48 编辑 ]
作者: 随风 时间: 2010-4-21 16:50
一步实现是不可能的
如果楼主要求的是以大写字母为分隔的话还会更麻烦,批处理区分大小写也很啰嗦。
作者: lj84831253 时间: 2010-4-21 16:52
那如果不一步实现而且不是用之母分割,而是用&符号分割呢?多步怎么实现?
作者: hanyeguxing 时间: 2010-4-21 17:05
- @echo off&setlocal enabledelayedexpansion
- set "n=abcdefgh&afdsafasfasfafafafawef"
- :han
- if not "!n:~%a%,1!"=="&" set/a a+=1&goto :han
- set/a a-=5
- echo.!n:~%a%^,5!
- pause
复制代码
作者: hanyeguxing 时间: 2010-4-21 17:22
事先能知道变量n的长度不?,例如20个字符- @echo off&setlocal enabledelayedexpansion
- set "n=abcdefgh&afdsafasfas"
- for /l %%i in (0,1,19) do if "!n:~%%i,1!"=="&" set/a m=%%i-5&call set "m=%%n:~!m!,5%%"
- echo.%m%
- pause
复制代码
作者: 随风 时间: 2010-4-21 17:25
始终认为逐字判断是万不得已才用的办法,因为效率太低
以左起的第一个大写字母 A 为分隔- @echo off & setlocal enabledelayedexpansion
- set n=000a1234a1234a56789555115Aafdsafasfasfafafafawef
- set m=!n!
- set h=!n:A= !
- for %%a in (!h!) do (
- set "m=!m:*%%a=!"
- set "var=!var!a%%a"
- if "!m:~0,1!"=="A" goto loop
- )
- :loop
- set "var=!var:~1!"
- echo !var:~-5!
- pause
复制代码
作者: lj84831253 时间: 2010-4-21 17:48
@echo off&setlocal enabledelayedexpansion
set "str=fjsfjslfsja123&12347284972"
set "var=!str:*&=!"
set "str=!str:%var%=!"
echo %str:~-6,-1%
pause>nul
这个也可以呵呵,谢谢你了!~
作者: lj84831253 时间: 2010-4-21 17:54
@echo off&setlocal enabledelayedexpansion
set "str=fjsfjslfsja123&12347284972"
for /f "delims=&" %%a in ("!str!") do set "var=%%a"
echo !var:~-5!
pause>nul
作者: lj84831253 时间: 2010-4-21 17:55
@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
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |