我已经在互联网上搜索了所有内容,但无济于事。你将如何只批量替换一个字符串的发现?假设我有代码:
SET string=chair chair book
有没有办法只替换“椅子”这个词一次?对于这样的事情?
chair book
我使用了编辑替换功能
SET furniture=%string:chair=%
但这使得椅子的所有实例都消失在
book
各位大侠有解决办法吗?
编辑:抱歉有任何混淆,我的意思是替换字符串的第一个实例。例如,给定
chair chair chair book
而“椅子”这个词,它会输出
chair chair book
至于第二个想法,我想我当时只想替换一个词。所以给出“椅子”
table desk chair chair book chair candle lamp lamp desk
这将是
table desk chair book chair candle lamp lamp desk
我真的很抱歉造成混乱,希望这能解决问题!
谢谢,猪油派
这可以通过一个简单的for
循环来完成。直接以我提供的代码从一个例子,从这个帖子由斯蒂芬-我们把每个字从你的String
,那么只需检查它是否是在wordpool已被使用。
RemoveAllDuplicateWords.bat:
@ECHO OFF
@setlocal EnableDelayedExpansion
Set "String=table desk chair chair book chair candle lamp lamp desk"
set "newstring="
for %%i in (%string%) do (
echo !newstring!|findstr /i "\<%%i\>" >nul || set "newstring=!newstring! %%i"
)
Set "furniture=%newstring:~1%"
Echo %furniture%
正如 Stephan 所说,/i
如果您希望过滤器区分大小写,请删除。
编辑:
因此,由于对线程请求的误解,我带来了一个可以解决用户帖子的编辑(希望如此)。根据他的澄清,他/她不想从字符串中删除重复的单词,而是删除彼此旁边的重复单词。
前: table desk chair chair book chair candle lamp lamp desk
后: table desk chair book chair candle lamp lamp desk
这个过程很简单,但可能会变得复杂。我这样做的过程是简单地比较每个单词,通过它之前的单词,出现在字符串中。这将采用Table Chair Chair Desk
或Table Chair Chair Chair Desk
或Table Chair Chair Chair Chair Desk
(你明白了)并将其更改为Table Chair Desk
.
由于此脚本非常冗长,因此您不会希望为每个字符串粘贴此脚本。一个惊人的解决方案就是call
它。当我把它变成一个函数。下面我将解释如何使用它。
命令: Call :RemoveMultipleWords [String You Want Edited] [New String]
例子: Call :RemoveMultipleWords String Furniture
请记住,您也可以编辑它自己的原始字符串。这意味着String Furniture
您可以将String String
.
RemoveOnlyDouble+Instances.bat:
@ECHO OFF
@setlocal EnableDelayedExpansion
Rem | Original String's
Set "Furniture=table desk chair chair book chair candle lamp lamp desk"
Set "Food=Lasagne Fettuccine_Alfredo Carbonara Carbonara Culatello Breadsticks Tortano Tortano"
Rem | Call To Fix Function
Call :RemoveMultipleWords Furniture Furniture
Echo !Furniture!
Call :RemoveMultipleWords Food IntlianFoods
Echo !IntlianFoods!
Rem | Exit BATCH
Pause
Exit /b
:RemoveMultipleWords
Rem | Reset LoopCount
Set "LoopCount=0"
Rem | Process Each Item
for %%A in (!%1!) do (
Rem | Get Current Word
Set "CurrentWord=%%A"
Rem | Set First Word
If "!LoopCount!"=="0" (
Rem | Set LoopCount
Set "LoopCount=1"
Rem | First Run
Set "%2=%%A"
) ELSE (
Rem | Upcoming Runs
If "!LoopCount!"=="1" (
Rem | First Word
Set "LastWord1=%%A"
Rem | Add LoopCount
Set "LoopCount=2"
Rem | Echo Results
If not "!LastWord2!"=="%%A" (Set "%2=!%2! !CurrentWord!")
) ELSE (
Rem | Next Word
Set "LastWord2=%%A"
Rem | Subtract LoopCount
Set "LoopCount=1"
Rem | Echo Results
If not "!LastWord1!"=="%%A" (Set "%2=!%2! !CurrentWord!")
)
)
)
Goto :EOF
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句