我尝试使用一些文件执行批处理并使用收集的信息创建XML,但是要在XML中创建字符串,我不得不在引号内声明var,并且这些引号稍后出现在XML中。< / p>
bat文件
cls
var mybar
set "mybar="
for /r %%i in (*.pdf) do call :concat %%i
echo "%mybar%" >mig.txt
copy inici.txt+mig.txt+final.txt prova2.txt
goto :eof
:concat
set "inici=<file indexFlag="False"> <name><![CDATA["
set "final=]]></name><folder><![CDATA[pdfs]]></folder></file>"
set "mybar=%mybar%%inici%%1%final%"
goto :eof
生成的XML文件
<files> " <= THESE QUOTES SHOULD NOT APPEAR
<file indexFlag="False">
<name>
<![CDATA[K:\files\aaa.pdf]]>
</name>
<folder>
<![CDATA[pdfs]]>
</folder>
</file>
<file indexFlag="False">
<name>
<![CDATA[K:\files\bbb.pdf]]>
</name>
<folder>
<![CDATA[pdfs]]>
</folder>
</file>" <= THESE QUOTES SHOULD NOT APPEAR
</files>
答案 0 :(得分:0)
而不是行
echo "%mybar%" >mig.txt
您可以使用~
循环内的for
来删除变量中的引号,如下所示:
(for %%a in ("%mybar%") do echo %%~a )> mig.txt
答案 1 :(得分:0)
FOR /f "tokens=1*delims==" %%a IN ('set mybar') DO IF "%%a"=="mybar" >mig.txt ECHO(%%b
这应该可以解决您的问题 - 但显然不会重新格式化生成的XML。
set
的输出为mybar=<file index...</file>
; =
的分隔符将mybar
应用于%%a
,将<file index...</file>
应用于%%b
您需要按所示过滤输出,以限制ECHO
my "%%a"=="mybar"`` in case
mybar1 or any other variable beginning
设置mybar`
答案 2 :(得分:0)
@echo off
setlocal enableextensions disabledelayedexpansion
set "openFile=<file indexFlag="False"> <name><![CDATA["
set "closeFile=]]></name><folder><![CDATA[pdfs]]></folder></file>"
(for /r %%i in (*.pdf) do (
set "file=%openFile%%%~fi%closeFile%"
setlocal enabledelayedexpansion
echo(!file!
endlocal
)) > mig.txt
copy inici.txt+mig.txt+final.txt prova2.txt