我有一個文件夾,其中包含大約15,103 xml文件。批量不給所需的輸出
該文件夾中的xml文件示例如下。
的XML部分我想關注的一個片段。
<imgdir name="000010000.img">
<imgdir name="info">
<int name="version" value="10" />
<int name="cloud" value="0" />
<int name="town" value="0" />
<float name="mobRate" value="1.0" />
<string name="bgm" value="Bgm34/MapleLeaf" />
<int name="returnMap" value="10000" />
<string name="mapDesc" value="" />
<int name="hideMinimap" value="0" />
<int name="forcedReturn" value="999999999" />
<int name="moveLimit" value="0" />
<string name="mapMark" value="MushroomVillage" />
<int name="swim" value="0" />
<int name="fieldLimit" value="8260" />
<int name="VRTop" value="-892" />
<int name="VRLeft" value="-1064" />
<int name="VRBottom" value="915" />
<int name="VRRight" value="1334" />
<int name="fly" value="0" />
<int name="noMapCmd" value="0" />
<string name="onFirstUserEnter" value="" />
<string name="onUserEnter" value="go10000" />
<int name="standAlone" value="0" />
<int name="partyStandAlone" value="0" />
<string name="fieldScript" value="" />
</imgdir>
</imgdir>
<imgdir name="portal">
<imgdir name="0">
<string name="pn" value="sp" />
<int name="pt" value="0" />
<int name="x" value="-389" />
<int name="y" value="183" />
<int name="tm" value="999999999" />
<string name="tn" value="" />
</imgdir>
<imgdir name="1">
<string name="pn" value="sp" />
<int name="pt" value="0" />
<int name="x" value="-416" />
<int name="y" value="185" />
<int name="tm" value="999999999" />
<string name="tn" value="" />
</imgdir>
<imgdir name="2">
<string name="pn" value="sp" />
<int name="pt" value="0" />
<int name="x" value="-450" />
<int name="y" value="183" />
<int name="tm" value="999999999" />
<string name="tn" value="" />
</imgdir>
<imgdir name="3">
<string name="pn" value="out00" />
<int name="pt" value="2" />
<int name="x" value="1080" />
<int name="y" value="541" />
<int name="tm" value="20000" />
<string name="tn" value="in00" />
<string name="script" value="" />
<int name="hideTooltip" value="0" />
<int name="onlyOnce" value="0" />
<int name="delay" value="0" />
</imgdir>
</imgdir>
輸出1:這是我想要的輸出;
[10000]
total=4
sp 0 -389 183 999999999
sp 0 -416 185 999999999
sp 0 -450 183 999999999
out00 2 1080 541 20000
這裏是批次代碼;
@echo off
setlocal EnableDelayedExpansion
(for %%a in (*.xml) do call :processFile "%%a") > output.txt
goto :EOF
:processFile
set "returnMap="
for /F "tokens=3,5 delims==> " %%a in ('findstr /C:"<int name=" /C:"<imgdir name=" /C:"<string name=" %1') do (
if not defined returnMap (
if %%a equ "returnMap" (
echo [%%~b]
set returnMap=true
set "portal="
)
) else (
if not defined portal (
if %%a equ "portal" set portal=true & set /A i=0, skip=1
) else (
if !skip! equ 1 (
set /A skip-=1
set "line="
) else if %%a neq "tn" (
set "line=!line! %%~b"
) else (
set /A i+=1, skip=1
set "line[!i!]=!line:~1!"
if %%b neq "" goto endPortals
)
)
)
)
OUTPUT2:這是我在output.txt中獲得的輸出,而不是上面所需的輸出;
C:\Users\Andrew\Desktop\New folder>call :processFile "000010000.img.xml"
C:\Users\Andrew\Desktop\New folder>set "returnMap="
C:\Users\Andrew\Desktop\New folder>for /F "tokens=3,5 delims==> " %a in ('findstr /C:"<int name=" /C:"<imgdir name=" /C:"<string name=" "000010000.img.xml"') do (if not defined returnMap (if %a EQU "returnMap" (
echo [%~b]
set returnMap=true
set "portal="
)) else (if not defined portal (if %a EQU "portal" set portal=true & set /A i=0, skip=1) else (if !skip! EQU 1 (
set /A skip-=1
set "line="
) else if %a NEQ "tn" (set "line=!line! %~b") else (
set /A i+=1, skip=1
set "line[!i!]=!line:~1!"
if %b NEQ "" goto endPortals
))))
C:\Users\Andrew\Desktop\New folder>(if not defined returnMap (if "1.0" EQU "returnMap" (
echo [UTF-8]
set returnMap=true
set "portal="
)) else (if not defined portal (if "1.0" EQU "portal" set portal=true & set /A i=0, skip=1) else (if !skip! EQU 1 (
set /A skip-=1
set "line="
) else if "1.0" NEQ "tn" (set "line=!line! UTF-8") else (
set /A i+=1, skip=1
set "line[!i!]=!line:~1!"
if "UTF-8" NEQ "" goto endPortals
))))
C:\Users\Andrew\Desktop\New folder>echo total=
total=
C:\Users\Andrew\Desktop\New folder>for /L %i in (1 1) do echo !line[%i]!
什麼是錯?
有什麼不對?您正在使用批處理語言來嘗試和處理XML。嘗試使用XML處理庫 - Python,Perl等來查看更強大的腳本語言... – 2014-03-26 01:27:09
當我在XML文件夾中運行批處理文件時,output.txt包含的文本是OUTPUT2,而不是所需的文本OUTPUT1的文本。 – user3457618