出现在bat文件结果中的引号

时间:2014-02-23 19:58:56

标签: xml batch-file

我尝试使用一些文件执行批处理并使用收集的信息创建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>

3 个答案:

答案 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