虽然不是防弹解决方案(使用for,artoon),但没有更多信息,这可以完成工作
@echo off
setlocal enableextensions enabledelayedexpansion
set "str=4567=abcde"
rem Step 1 - remove the left part
set "str1=!str:%str%!"
rem Step 2 - Get the right part
set "right=!str:*%str1%!"
rem Step 3 - Get the left part
set "left=!str:%right%=!"
set "left=%left:~0,-1%"
echo [%left%] [%right%]
编辑以适应 cmets(cmets 中的 OP 代码适应我的代码,或相反)
for /f "delims=" %%i in ('set') do (
setlocal enabledelayedexpansion
rem Step 1 - remove the left part
set "str=%%i"
for %%x in ("!str!") do set "str1=!str:%%~x!"
rem Step 2 - Get the right part
for %%x in ("!str1!") do set "right=!str:*%%~x!"
rem Step 3 - Get the left part
for %%x in ("!right!") do set "left=!str:%%~x=!"
set "left=!left:~0,-1!"
echo [!left!] [!right!]
endlocal
)
不,如前所述,这不是防弹的,并且某些变量显示出问题(我是否说过它不是防弹的?)。
我不明白的是不使用for 循环然后使用for 循环的要求。这样方便很多
for /f "tokens=1,* delims==" %%a in ('set') do (
echo [%%a] [%%b]
)
另一种选择(不像for那么简单,比前一个更稳定,非防弹)是
for /f %%a in ('set') do (
call :split left right %%a
echo [!left!] [!right!]
)
goto :eof
:split leftVar rightVar data
set "%~1=%~3"
setlocal enabledelayedexpansion
set "data=%*"
set "data=!data:*%1 %2 %3=!"
set "data=%data:~1%"
endlocal & set "%~2=%data%"
goto :eof