Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file Can';t使用enableDelayedExpansion在批处理文件中的引号内转义分号_Batch File - Fatal编程技术网

Batch file Can';t使用enableDelayedExpansion在批处理文件中的引号内转义分号

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&

我正在通过批处理操作一些HTML。我使用的是延迟扩展,但当在双引号中遇到分号时,脚本无法复制分号之后的任何内容

这可能是因为,当我将变量传递给
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。它们是我可以随意操纵的文本,明白了。我编辑了我原来的帖子。谢谢你在这方面的帮助:)。明白了。我编辑了我原来的帖子。感谢您在这方面的帮助:)。