Batch file Can';t使用enableDelayedExpansion在批处理文件中的引号内转义分号
我正在通过批处理操作一些HTML。我使用的是延迟扩展,但当在双引号中遇到分号时,脚本无法复制分号之后的任何内容 这可能是因为,当我将变量传递给Batch file Can';t使用enableDelayedExpansion在批处理文件中的引号内转义分号,batch-file,Batch File,我正在通过批处理操作一些HTML。我使用的是延迟扩展,但当在双引号中遇到分号时,脚本无法复制分号之后的任何内容 这可能是因为,当我将变量传递给putLineInHTMLFile标签时,我使用了双引号(我需要在标签中保持分隔) file.html包含: <tag1> <tag"bla;2"> <tag1> <tag"bla 运行脚本后,output.html包含: <tag1> <tag"bla;2"> <tag1&
putLineInHTMLFile
标签时,我使用了双引号(我需要在标签中保持分隔)
file.html包含:
<tag1>
<tag"bla;2">
<tag1>
<tag"bla
运行脚本后,output.html包含:
<tag1>
<tag"bla;2">
<tag1>
<tag"bla
当然可以。问题是子程序接收
“”
为了那条线。解析器将其视为
标记1:“
因为代码>like空格是分隔符
不幸的是,在不知道您打算在子例程中执行什么的情况下,很难就如何规避该问题提出建议
您需要更改sourcedir
和destdir
的设置以适应您的环境。
我使用了一个名为q43391363.txt
的文件,其中包含了测试数据
生成定义为%outfile%和%outfile2%的文件
这里有两种不同的方法,一种是使用常规输出直接到outfile1
,另一种是使用从子程序重定向到outfile2
。问题是子程序接收
“”
为了那条线。解析器将其视为
标记1:“
因为代码>like空格是分隔符
不幸的是,在不知道您打算在子例程中执行什么的情况下,很难就如何规避该问题提出建议
您需要更改sourcedir
和destdir
的设置以适应您的环境。
我使用了一个名为q43391363.txt
的文件,其中包含了测试数据
生成定义为%outfile%和%outfile2%的文件
所以-这里有两种不同的方法,一种是使用常规输出直接到outfile1
,另一种是使用从子例程重定向到outfile2
,这似乎适用于给定的测试用例;不保证更广泛地使用:
@echo off
setlocal enableDelayedExpansion
del output.html
for /f "delims=# tokens=*" %%x in (file.html) do (
set "safe=%%x"
set "safe=!safe:"=""!"
call :putLineInHTMLFile "!safe!"
)
goto :eof
:putLineInHTMLFile
set "line=%~1"
set "line=%line:""="%"
echo !line!>> output.html
:eof
在for
命令的主体中,%%x
未被拆分,只有在调用
命令处理时才会发生这种情况。为了保护这一点,我使用了safe
将字符串中的所有双引号加倍,然后在子例程中添加一行,再次将它们去掉
如果双引号不匹配,这将无法正常工作,但在这些情况下,尾随
的回声也不会正常工作,即使不存在分号。这似乎适用于给定的测试用例;不保证更广泛地使用:
@echo off
setlocal enableDelayedExpansion
del output.html
for /f "delims=# tokens=*" %%x in (file.html) do (
set "safe=%%x"
set "safe=!safe:"=""!"
call :putLineInHTMLFile "!safe!"
)
goto :eof
:putLineInHTMLFile
set "line=%~1"
set "line=%line:""="%"
echo !line!>> output.html
:eof
在for
命令的主体中,%%x
未被拆分,只有在调用
命令处理时才会发生这种情况。为了保护这一点,我使用了safe
将字符串中的所有双引号加倍,然后在子例程中添加一行,再次将它们去掉
如果双引号不匹配,则此方法无法正常工作,但在这些情况下,即使不存在分号,尾随
的回显也不会正常工作。此方法适用于所有情况,只要输入行中的引号匹配(偶数):
@echo off
setlocal enableDelayedExpansion
del output.html
for /f "delims=" %%x in (file.html) do call :putLineInHTMLFile "%%x"
goto :EOF
:putLineInHTMLFile
set line=%*
echo !line:~1,-1!>> output.html
PS-请不要包括未出现在中的其他零件,如:eof
标签。。。标签在goto:EOF
命令中以大写字母书写,以表示其特殊性。键入goto/?
了解更多详细信息。只要输入行中的引号匹配(偶数),此方法在所有情况下都有效:
@echo off
setlocal enableDelayedExpansion
del output.html
for /f "delims=" %%x in (file.html) do call :putLineInHTMLFile "%%x"
goto :EOF
:putLineInHTMLFile
set line=%*
echo !line:~1,-1!>> output.html
PS-请不要包括未出现在中的其他零件,如:eof
标签。。。标签在goto:EOF
命令中以大写字母书写,以表示其特殊性。键入goto/?
了解更多详细信息。我正在从多个其他源构建一个HTML文件,包括两个包含页脚和页眉的其他HTML文件。我有没有办法避开分号?我可以改变页脚和页眉的“HTML”文件,因为它们不是真正的HTML。它们是我可以随意操作的文本。我正在从多个其他来源构建一个HTML文件,包括两个包含页脚和页眉的其他HTML文件。我有没有办法避开分号?我可以改变页脚和页眉的“HTML”文件,因为它们不是真正的HTML。它们是我可以随意操纵的文本,明白了。我编辑了我原来的帖子。谢谢你在这方面的帮助:)。明白了。我编辑了我原来的帖子。感谢您在这方面的帮助:)。