当两个字符串中都有保留字符时,我想不出从字符串中删除子字符串的方法。我尝试过的一切都没有运气。
我刚开始批量处理,但是现在我使用的是此处所述的方法,但进行了修改:String replacement in batch file
这是我的代码示例,但是对!根本不起作用!或:在字符串中:
:: NOT WORKING
:RemoveWordsFromFileInLine
:: %1 string to remove
:: %2 source file
:: %3 destination file
setlocal enabledelayedexpansion
:: Loop through each "word" of every "line"
set "toReplace=%1 "
set "blank="
del %3
for /F "tokens=* delims=" %%a in (%2) do (
setlocal disabledelayedexpansion
echo "line=%%a"
echo line is %line%
setlocal enabledelayedexpansion
set "newLine=!line:%toReplace%=%blank%!"
echo newLine is !newLine!
@echo !newLine! >>%3
endlocal
)
if exist %3 ( move /y %3 %2 >nul )
GOTO:EOF
如您所见,我尝试在行变量的“集合”上禁用延迟扩展,但是我不能在替换部分中做到这一点。
文件中的一些示例字符串为:
<!-- XML Comment goes here -->
<planets> Mars world:Earth </planets>
<planets> Venus Earth Mercury </planets>
一些我想替换的示例字符串是:
world:Earth
Earth
任何人都对如何使字符串替换起作用有任何想法?我已经尝试了很多事情,通常涉及到在各个地方都用双引号引起来(例如,在字符串replace语句中的行变量周围),但是我还没有运气。
答案 0 :(得分:0)
感谢aschipfl帮助我解决了这个问题;我的主要问题归结于对setlocal / endlocal的不良使用。我很确定要解决这个问题是导致我所有尝试失败的原因。
最终密码结尾:
:RemoveWordsFromFileInLine
:: %1 string to remove
:: %2 source file
:: %3 destination file
setlocal disabledelayedexpansion
:: Loop through each "word" of every "line"
set "toReplace=%1 "
set "blank="
del %3
for /F "tokens=* delims=" %%a in (%2) do (
set "line=%%a"
setlocal enabledelayedexpansion
set "newLine=!line:%toReplace%=%blank%!"
@echo !newLine! >>%3
endlocal
)
endlocal
if exist %3 ( move /y %3 %2 >nul )
GOTO:EOF
需要注意的最大事情(据我了解):