2017-06-09 111 views
0

我想用命令行組織我的xml/kml文件。我可以使用findstr "STRING" file.txt來查找我只需要的數據,但似乎無法從其父項中獲取剩餘的子項。 KML文件的結構類似於Findstr輸出孩子和父母

<Placemark> 
<name></name> 
<description> [The sring data I need] </description> 
<Point><coordinates></coordinates></Point> 
</Placemark> 

當我運行findstr我只得到描述數據和需要得到上述所有,任何想法?

+1

雖然也許可以用了很大的力氣,我強烈建議使用標準的Windows移植* nix中'grep',與該解決方案可以歸結爲'grep的-A2-B2「STRING」文件。 txt'。得到它[這裏](http://gnuwin32.sourceforge.net/packages/grep.htm)。 – zb226

回答

1

的grep-A3-B2 「字符串」 file.txt的工作對我來說 感謝@ zb226

1

此外,純一批

set "init=" 
set "term=" 
for /F "tokens=1,* delims=[]" %%A in ('type yourFile.xml ^| find /I /N "placemark"') do (
    if not defined init (set /a init=%%A) else (set /a term=%%A) 
) 
for /F "tokens=1,* delims=[]" %%A in ('type yourFile.xml ^| find /N /V "^"') do (
    if %%A GEQ %init% if %%A LEQ %term% echo/%%B 
) 

編輯:這個問題是在的type前報價線for /F "tokens=1,* delims=[]" %%A in ('type yourFile.xml ...

和寫入到文件

set "init=" 
set "term=" 
for /F "tokens=1,* delims=[]" %%A in ('type yourFile.xml ^| find /I /N "placemark"') do (
    if not defined init (set /a init=%%A) else (set /a term=%%A) 
) 
>"myFile.txt" (
    for /F "tokens=1,* delims=[]" %%A in ('type yourFile.xml ^| find /N /V "^"') do (
    if %%A GEQ %init% if %%A LEQ %term% echo/%%B 
) 
) 

因此,任何echo ...打印到MYFILE.TXT

+0

我認爲這可能有語法錯誤,或需要轉義字符。沒有爲我工作。 – lnsflive

+0

我在哪裏寫入文件,所以我可以看到它的工作原理,因爲它對我沒有任何幫助。 – lnsflive

+0

@lnsflive代碼編輯,我犯了一個錯字。希望它可以幫助 – elzooilogico

1

我肯定會建議你去爲grep解決方案時可用。 因爲我有興趣瞭解如何通過批處理文件腳本解決問題—爲什麼—爲了完整起見,我決定發佈腳本。

請記住,使用批處理文件執行字符串搜索時總會遇到一些限制/特殊情況。

該腳本將顯示lines變量所指定的行數。 offset變量指定要在哪一行查找的字符串。當找到多個匹配項時,只顯示最後一個匹配項。

@echo off 

setlocal enabledelayedexpansion 
set "source=file.txt" 
set "find=[The string data I need]" 
set "lines=5" 
set "offset=3" 

for /f "delims=:" %%e in ('findstr /n /c:"%find%" "%source%"') do (
    set /a position=%%e-offset 
) 

if not defined position (
    echo No matches found for: %find% 
    exit /b 
) 

for /f "usebackq skip=%position% delims=" %%e in ("%source%") do (
    if !count!0 lss %lines%0 (
    echo %%e 
    set /a count+=1 
) 
) 
+0

它只是關閉,找到我需要把我的字符串內的[]?或者在=之後? – lnsflive

+0

在等號後面放置需要查找的字符串。就我個人而言,我發現從現有的命令提示符窗口執行腳本更方便,因爲您只需按下向上箭頭鍵即可再次執行它。如果您更喜歡從Window Explorer執行腳本,則可以在文件的末尾和任何'exit'命令之前放置'pause'命令。 – treintje