Che*_*eso 56 windows split batch-file
假设我有一个字符串"AAA BBB CCC DDD EEE FFF".
如何在批处理文件中拆分字符串并检索第n个子字符串?
C#中的等价物将是
"AAA BBB CCC DDD EEE FFF".Split()[n]
Run Code Online (Sandbox Code Playgroud)
Chr*_*use 40
迭代字符串的三种可能的解决方案:
版本1:
@echo off & setlocal
set s=AAA BBB CCC DDD EEE FFF
for %%a in (%s%) do echo %%a
Run Code Online (Sandbox Code Playgroud)
版本2:
@echo off & setlocal
set s=AAA BBB CCC DDD EEE FFF
set t=%s%
:loop
for /f "tokens=1*" %%a in ("%t%") do (
echo %%a
set t=%%b
)
if defined t goto :loop
Run Code Online (Sandbox Code Playgroud)
版本3:
@echo off & setlocal
set s=AAA BBB CCC DDD EEE FFF
call :sub1 %s%
exit /b
:sub1
if "%1"=="" exit /b
echo %1
shift
goto :sub1
Run Code Online (Sandbox Code Playgroud)
当字符串包含'*'或'?'等通配符时,版本1不起作用.
版本1和3处理'=',';'等字符 或','作为单词分隔符.这些字符与空格字符具有相同的效果.
PA.*_*PA. 31
看看HELP FOR并看到例子
或者快点试试吧
for /F %%a in ("AAA BBB CCC DDD EEE FFF") do echo %%c
Run Code Online (Sandbox Code Playgroud)
小智 28
这是唯一适合我的代码:
for /f "tokens=4" %%G IN ("aaa bbb ccc ddd eee fff") DO echo %%G
Run Code Online (Sandbox Code Playgroud)
输出:
ddd
Run Code Online (Sandbox Code Playgroud)
Dav*_*ave 14
以下代码将使用任意数量的子字符串拆分字符串:
@echo off
setlocal ENABLEDELAYEDEXPANSION
REM Set a string with an arbitrary number of substrings separated by semi colons
set teststring=The;rain;in;spain
REM Do something with each substring
:stringLOOP
REM Stop when the string is empty
if "!teststring!" EQU "" goto END
for /f "delims=;" %%a in ("!teststring!") do set substring=%%a
REM Do something with the substring -
REM we just echo it for the purposes of demo
echo !substring!
REM Now strip off the leading substring
:striploop
set stripchar=!teststring:~0,1!
set teststring=!teststring:~1!
if "!teststring!" EQU "" goto stringloop
if "!stripchar!" NEQ ";" goto striploop
goto stringloop
)
:END
endlocal
Run Code Online (Sandbox Code Playgroud)
我最终得到以下结果:
set input=AAA BBB CCC DDD EEE FFF
set nth=4
for /F "tokens=%nth% delims= " %%a in ("%input%") do set nthstring=%%a
echo %nthstring%
Run Code Online (Sandbox Code Playgroud)
这样您就可以参数化输入和索引。确保将此代码放入 bat 文件中。
简单
批处理文件:
FOR %%A IN (1 2 3) DO ECHO %%A
Run Code Online (Sandbox Code Playgroud)
命令行:
FOR %A IN (1 2 3) DO ECHO %A
Run Code Online (Sandbox Code Playgroud)
输出:
1
2
3
Run Code Online (Sandbox Code Playgroud)
如果有人需要用任何分隔符拆分字符串并将值存储在单独的变量中,这是我构建的脚本,
FOR /F "tokens=1,2 delims=x" %i in ("1920x1080") do (
set w=%i
set h=%j
)
echo %w%
echo %h%
Run Code Online (Sandbox Code Playgroud)
说明:'tokens' 定义了需要传递给 FOR 主体的元素,标记由字符 'x' 分隔。所以在定界之后,第一个和第二个标记被传递给正文。在正文中, %i 指的是第一个标记, %j 指的是第二个标记。我们可以用 %k 来指代第三个令牌等等..
还请在 cmd 中键入HELP FOR以获取详细说明。