2014-02-23 56 views
1

我嘗試使用一些文件進行批處理,並使用收集的信息創建XML,但要在XML中創建字符串我不得不在引號中聲明var,引號稍後出現在XML中。bat文件的結果中出現的引號

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

代替線

echo "%mybar%" >mig.txt 

您可以通過使用~for循環如下剝去可變報價:

(for %%a in ("%mybar%") do echo %%~a)> mig.txt 
+0

我嘗試過了,它沒沒有工作。它爲結果添加〜a。無論如何,謝謝 – user3344221

+0

奇怪的是,它適用於我的機器。你使用的是哪個版本的Windows? – mbroshi

+0

Windows 7家庭高級版服務包1 – user3344221

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荷蘭國際集團以"%%a"=="mybar"`` in case mybar1 or any other variable beginning mybar`設置

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 
+0

太棒了!非常感謝。你解決了我在最初代碼中看到的另一個錯誤,所以雙謝。 – user3344221