String 批处理*通配符替换
我有一个String 批处理*通配符替换,string,batch-file,replace,wildcard,String,Batch File,Replace,Wildcard,我有一个base格式的字符串*+*。我想在+之前得到所有东西。 例如,如果base=foo+bar,我想得到foo 我试过用字符串替换法 set left=%base:+*=% 但这会导致left存储foo+bar 有趣的是,字符串替换可以使+的所有内容都正确: set right=%base:*+=% 是否将+*替换为+(即通配符替换0个字符)?有没有更好的方法来完成我的任务 编辑:我实际上是在一个for循环中这样做的。因此,延迟扩展已打开,(我认为)我需要使用!。完整代码如下: for
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:以上代码中的注释仅用于此处的可读性,因此:-样式注释在for循环中可能无法正常工作。请参阅
从字符串右侧删除字符需要两个步骤,需要使用CALL语句:
我从来没有用通配符替换过环境变量字符串,可能是因为发行了正确的wOxxOm注释 我倾向于采用这种方法:
for /f "tokens=1,2 delims=+" %a in ('echo %base%') do (
set left=%a
set right=%b
)
您可以使用:
编辑:如果要在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
可以从字符串中减去右侧:
@echo off
setlocal enabledelayedexpansion
set "base=foo+bar"
set left=%base:*+=%
set "right=!base:+%left%=!"
echo %left% / %right%
但我建议另一种方法:
@echo off
set "base=foo+bar"
for /f "tokens=1,* delims=+" %%i in ("%base%") do (
set "left=%%i"
set "right=%%j"
)
echo %left% / %right%
你是用什么语言写的?从语法和标记来看,这是一个Windows批处理文件。是的,只是想了想,但是我用的不是
'echo%base%'
,而是%base%”
。你应该使用“tokens=1*”
,以防万一右边有额外的+
。@dbenham不会有。我实际上是在for循环中这样做的,那么我需要在哪里用!?也许到处都是。在第一篇文章中编辑你的问题并添加相关的代码。好吧,你只需要在set left=
之前添加call
。或者你也可以使用其他答案。按照预期工作,我在这一过程中学会了一些技巧。投了很多票。
@echo off
setlocal enabledelayedexpansion
set "base=foo+bar"
set left=%base:*+=%
set "right=!base:+%left%=!"
echo %left% / %right%
@echo off
set "base=foo+bar"
for /f "tokens=1,* delims=+" %%i in ("%base%") do (
set "left=%%i"
set "right=%%j"
)
echo %left% / %right%