簡體   English   中英

bat文件結果中出現的引號

[英]quotes appearing in result of a bat file

我嘗試對某些文件進行批處理,並使用收集到的信息創建XML,但是要在XML中創建字符串,我不得不在引號中聲明var,而這些引號稍后會出現在XML中。

蝙蝠文件


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>

代替線

echo "%mybar%" >mig.txt

您可以通過在for循環內使用~去除變量的引號,如下所示:

(for %%a in ("%mybar%") do echo %%~a )> mig.txt
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

如果設置了mybar1 or any other variable beginning "%%a"=="mybar"`` in case mybar` or any other variable beginning您將需要過濾顯示的輸出以將ECHO限制為"%%a"=="mybar"`` in case

@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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM