有人请帮忙......哦,我会非常感激的。我有一个非常长的批处理文件,除了每次用户输入输入时,它都会替换所需文件中的字符串但它正在删除文件中的!s,因为它们是XML配置文件而导致问题并且这些被评论需要留下的部分。除非有要求,否则我不会将整个代码放在这里,但是在坚果外壳中,用户进行某些输入,然后运行批处理文件......这里是一个文件代码的一部分....用户进入驱动器安装信和bdi服务器的名称。我希望用户输入替换%drive%和%bdi1%....它确实....但我不希望它替换已注释掉的部分...即:
<!-- Tcp message preamble and postamble are flags that mark the beginning and end of an HL7 message. turns into <-- Tcp message preamble and postamble are flags that mark the beginning and end of an HL7 message.
注意没有!
这是我的代码...我需要做些什么才能让它停止删除!我试着在这里看,我觉得我在Jeb的答案上很顺利,但我无法让它发挥作用。提前谢谢
if exist newfile.txt del newfile.txt
for /F "usebackq delims=" %%a in ("%drive%:\mckesson\%bdi1%\importer.config") do (
set str=%%a
set str=!str:server_name=%server%!
echo !str! >> newfile.txt
)
del importer.config
rename newfile.txt importer.config
if exist newfile.txt del newfile.txt
for /F "usebackq delims=" %%a in ("%drive%:\mckesson\%bdi1%\importer.config") do (
set str=%%a
set str=!str:bdi_name=%bdi1%!
echo !str! >> newfile.txt
)
del importer.config
rename newfile.txt importer.config
if exist newfile.txt del newfile.txt
for /F "usebackq delims=" %%a in ("%drive%:\mckesson\%bdi1%\importer.config") do (
set str=%%a
set str=!str:share_name=%share%$!
echo !str! >> newfile.txt
)
del importer.config
rename newfile.txt importer.config
if exist newfile.txt del newfile.txt
for /F "usebackq delims=" %%a in ("%drive%:\mckesson\%bdi1%\importer.config") do (
set str=%%a
set str=!str:drive_bdi=%drive%!
echo !str! >> newfile.txt
)
del importer.config
rename newfile.txt importer.config
答案 0 :(得分:7)
延迟扩展和批量解析器的影响
如果禁用延迟扩展,感叹号不会出现问题,但如果启用了解析器,解析器会认为!
用于扩展变量,而当只有一个标记时,它将会被丢弃
因此,解决方案是禁用延迟扩展,但是在您需要时,您也必须启用它!
这可以通过在恰当的时刻简单地切换来完成。
setlocal DisableDelayedExpansion
(
for /F "usebackq delims=" %%a in ("%drive%:\mckesson\%bdi1%\importer.config") do (
set "str=%%a"
setlocal EnableDelayedExpansion
set "str=!str:server_name=%server%!"
set "str=!str:bdi_name=%bdi1%!"
set "str=!str:share_name=%share%$!"
set "str=!str:drive_bdi=%drive%!"
echo(!str!
endlocal
)
) > newfile.txt
我将重定向移至完整的FOR-block,速度更快,您不需要先删除该文件。
我尝试将所有替换内容移动到一个块中,因此您只需要读取一次该文件。