[英]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.