我有一个像这样的字符串。
adsads d b c dsad ds ads
如何拆分此字符串(在3个空格中)以从此字符串中获取d b c?
答案 0 :(得分:2)
@echo off
setlocal EnableDelayedExpansion
set "str=adsads d b c dsad ds ads"
set "i=1" & set "part[!i!]=%str: =" & set /A i+=1 & set "part[!i!]=%"
echo part[2] = "%part[2]%"
如果您想知道这个简单(一行)方法是如何工作的,只需删除@echo off
行并仔细查看已执行的代码!的 ;)
强>
答案 1 :(得分:1)
@ECHO OFF
SETLOCAL
SET "string=adsads d b c dsad ds ads"
FOR /f "tokens=1delims=#" %%p IN ("%string: =#%") DO ECHO token 1 is "%%p"
FOR /f "tokens=2delims=#" %%p IN ("%string: =#%") DO ECHO token 2 is "%%p"
FOR /f "tokens=3delims=#" %%p IN ("%string: =#%") DO ECHO token 3 is "%%p"
FOR /f "tokens=1,3delims=#" %%p IN ("%string: =#%") DO ECHO token 1 is "%%p"; token 3 is "%%q"
GOTO :EOF
此处,for /f
解析提供的字符串(在引号中)并将指定的令牌编号分配给%%p
(如果为{{1}指定了多于1个标记 },%%q
...)
引号之间的字符串是通过将%%r
替换为空格 空格 空格来构造的 - #是一个没有'的字符否则会出现在字符串中。
答案 2 :(得分:1)
您似乎需要第二个"令牌"。这可以通过简单的子串替换(不需要for
或延迟扩展)
set string=adsads d b c dsad ds ads
set string=%string:* =%
set string=%string: =&REM %
echo "%string%"
第一个set
从字符串的开头删除,直到(包括)三个空格。第二个使用解析器技巧删除接下来的三个空格和之后的任何内容。
答案 3 :(得分:0)
这取决于您根据问题的当前输入。换句话说,前3个空格将匹配到下3个空格。
@echo off
set "line=adsads d b c dsad ds ads"
set "line=%line: =:%"
for /f "tokens=1,2 delims=:" %%a in ("%line%") do (
echo %%b
)
答案 4 :(得分:0)
您可以将每个标记设置为由三个空格分隔为变量,然后只回显您想要的标记。
e.g。
Rem Turn off echoing of commands to the screen
@Echo Off
Rem enable delayed expansion
SetLocal EnableDelayedExpansion
Rem define a variable to hold the test string
Set "str=adsads d b c dsad ds ads"
Rem clear all variables beginning with `token`
For /F "Delims==" %%A In ('"Set token 2>Nul"') Do Set "%%A="
Rem Starting token number
Set "i=1"
Rem Set each token separated by three spaces as a variable
Set "token!i!=%str: =" & Set /A i+=1 & Set "token!i!=%"
Rem Exit if there token number was not incremented
If %i% Lss 2 Exit /B
Rem Show all token variables
Set token
Rem Echo only "token number 2"
Echo "%token2%"
Rem halt script to allow end user to read output
Pause
所有以Rem
开头的行仅供参考,因此可以将其删除:
@Echo Off
SetLocal EnableDelayedExpansion
Set "str=adsads d b c dsad ds ads"
For /F "Delims==" %%A In ('"Set token 2>Nul"') Do Set "%%A="
Set "i=1"
Set "token!i!=%str: =" & Set /A i+=1 & Set "token!i!=%"
If %i% Lss 2 Exit /B
Echo %token2%
Pause