我有一个 base
形式的字符串 *+*
。我想在 + 之前获得所有内容。
例如,如果 base=foo+bar
,我想得到 foo
。
我试过用字符串替换来做
set left=%base:+*=%
但这会导致
left
存储 foo+bar
。有趣的是,字符串替换可以使 + 的所有内容都正确:
set right=%base:*+=%
+*
是否被 +
替换(即通配符替换了 0 个字符)?有没有更好的方法来完成我的任务?编辑:我实际上是在 for 循环中执行此操作。因此,延迟扩展已开启,(我认为)我需要使用 !。完整代码在这里:
for /d %%d in (*+*) do (
set base=%%d
set right=!base:*+=!
set left=!base:+*=! ::this part doesn't work
if !left:~-2!==!right:~-2! ( ::do only if last 2 chars match
copy %%d mirrors
copy %%d\%%d_montage.bmp mirrors
)
)
编辑 2:上面代码中的注释仅用于 SO 上的可读性。::样式的注释在 for 循环中可能无法正常工作。
最佳答案
您可以使用 this trick :
@echo off
set "base=foo+bar"
set "left=%base:+=" & set "right=%"
echo Left=%left%
echo Right=%right%
编辑 :如果要在
for
循环中使用该方法,请按以下方式使用:@echo off
setlocal EnableDelayedExpansion
for %%a in ("one+two" "first+last") do (
call :separate %%a
echo Left=!left!
echo Right=!right!
echo/
)
goto :EOF
:separate
set "base=%~1"
set "left=%base:+=" & set "right=%"
exit /B
关于string - 批量 * 通配符替换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31440226/