拆分三个空格 - batchscript

时间:2018-02-15 13:18:45

标签: string parsing batch-file

我有一个像这样的字符串。

adsads   d b c   dsad   ds   ads

如何拆分此字符串(在3个空格中)以从此字符串中获取d b c?

5 个答案:

答案 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