Мне нужно вырезать часть текстового файла и записать его в другой. Удаленный текстовый файл также должен быть сохранен.
Перед:
Original.txt = "<xml><something>values</something><script>TEXT-TO-DELETE</script></xml>"
После:
Original.txt = "<xml><something>values</something><script></script></xml>"
Original_script.txt = "TEXT-TO-DELETE"
.. это многострочный файл, поэтому раздел сценария занимает много строк.
Я пытался использовать сценарии, которые были опубликованы, но никогда не мог понять синтаксис.
"@echo off & setlocal
set "Data=D:\Original.txt"
set "Bak=%Data%.bak"
move "%Data%" "%Bak%"
for /f "usebackq delims=" %%i in ("%Bak%") do set "LINE=%%i" & call :ProcessLine
REM del "%Bak%"
goto :eof
:ProcessLine
echo %LINE%>>"%Data%"
echo %LINE%|findstr /b "<script>">nul || goto :eof
goto :eof"
Это должно быть для компьютеров с Windows .. (поддержка более новой ОС)
РЕДАКТИРОВАТЬ: поскольку я не могу ответить в своей теме, я делаю это здесь:
Спасибо за ответ. К сожалению, я не хочу использовать условно-бесплатное ПО для этого. Я разбираю на другом языке, мне просто нужно раздеть это.
Это нелепый 3-строчный:
file={"p1.txt","p2.txt","p1.txt"}
find={"<search>","</search>,"<xml>"}
count=1
foreachline in file[count] print line to file[count]
if find[count] in line then count++
Или похожие. Если бы не было 1000 способов/стилей написания сценариев, я бы сам это понял. Просто подумал, что какой-нибудь крэк даст ему минутку.
1 ответ
Я думаю, что XSLT-процессор с интерфейсом командной строки — наиболее подходящий инструмент. Сейчас я чаще всего использую AltovaXML2011.
Затем сценарий может быть примерно таким, чтобы извлечь содержимое элементов script
в ваш файл Original_script, а затем обновить исходный файл:
@echo off
set orig="D:\Original.txt"
set script="D:\Original_script.txt"
set backup="D:\Original_backup.txt"
set xsltprocessor="D:\AltovaXML.exe"
move %orig% %backup%
::extract scripts
%xsltprocessor% -xslt1 "D:\ExtractScripts.xslt" -in %backup% -out %script%
::update original
%xsltprocessor% -xslt1 "D:\UpdateOriginal.xslt" -in %backup% -out %orig%
::del %backup%
При таком виде ExtractScripts.xslt извлекает содержимое всех элементов script
(добавляя новые строки):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="//script"/>
</xsl:template>
<xsl:template match="//script">
<xsl:apply-templates/>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
Если UpdateOriginal.xslt выглядит следующим образом, он просто копирует весь исходный файл, но не включает содержимое всех элементов script
(уже извлеченных отдельно):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//script">
<xsl:copy/>
</xsl:template>
</xsl:stylesheet>
После этого вы можете сохранить или удалить файл резервной копии.
Похожие вопросы
Новые вопросы
batch-file
Пакетный файл - это текстовый файл, содержащий серию команд, которые выполняются интерпретатором команд в системах MS-DOS, IBM OS / 2 или Microsoft Windows.