CMD/BAT - [решено] вывод строки из *.xml

Ответить
 • Просмотры: 2
Аватара пользователя
Guest

Re: CMD/BAT - [решено] вывод строки из *.xml

Сообщение Guest »

Вот, теперь всё предельно чётко, так бы сразу и сформулировали.

Код: Выделить всё

@Echo Off
SetLocal EnableDelayedExpansion
Set Path=%Path%;%CD%\bin
Set XMLPath=D:\Temp\xmlfiles
For /F "delims=" %%F In ('Dir "%XMLPath%\*.xml" /B 2^>nul') Do (
	Set Prefix=&Set InsuranceNumber=0
	For /F "tokens=1,2 delims=_" %%P In ("%%~F") Do (Set Prefix=%%P)
	For /F "tokens=2 delims=><" %%N In ('grep -Eo "<InsuranceNumber>[^<]*</InsuranceNumber>" "%XMLPath%\%%F"') Do (
		If Not %%N==/InsuranceNumber Set InsuranceNumber=%%N
	)
	Call :StringLen "!InsuranceNumber!"
	If !$StringLen!==5 (Echo !Prefix!_!InsuranceNumber!>>"result_5and6.txt")
	If !$StringLen!==6 (Echo !Prefix!_!InsuranceNumber!>>"result_5and6.txt")
	If Not !$StringLen!==5 (
		If Not !$StringLen!==6 (
			Echo !Prefix!_!InsuranceNumber!>>"result_other.txt"
		)
	)
)
Pause&Exit
:StringLen
:: Автор функции - amel27, viewtopic.php?p=68849#p68849
   Set $StringLen=0&Set $StringBuf=%~1
   If ""=="%~1" GoTo :EOF
:StringLenLoop
   Set /A $StringLen+=1
   Call Set $StringChr=%%$StringBuf:~%$StringLen%%%
   If ""=="%$StringChr%" GOTO :EOF
GoTo :StringLenLoop
Аватара пользователя
Guest

Re: CMD/BAT - [решено] вывод строки из *.xml

Сообщение Guest »

я наверное неправильно выразился.

Надо читать внутренний номер InsuranceNumber и если он 5 или 6, то в один файл, если он точка, ноль или отличается от 5 и 6, то в другой.

Все исправил сам, спасибо.
Аватара пользователя
LAKERS824

Re: CMD/BAT - [решено] вывод строки из *.xml

Сообщение LAKERS824 »

Anonymоus, огромнейшее спасибо.
Аватара пользователя
LAKERS824

Re: CMD/BAT - [решено] вывод строки из *.xml

Сообщение LAKERS824 »

Код:

Код: Выделить всё

recode -f utf8/crlf..cp1251 <D:\pronin\result5and6.txt >>D:\pronin\new_result5and6.txt

выдает пустой файл, но в ANSI, а не результат преобразования.
Аватара пользователя
Guest

Re: CMD/BAT - [решено] вывод строки из *.xml

Сообщение Guest »

LAKERS824, попробуйте вот так:

Код: Выделить всё

@Echo Off
SetLocal EnableDelayedExpansion
Set Path=%Path%;%CD%\bin
Set XMLPath=D:\Temp\xmlfiles
For /F "delims=" %%F In ('Dir "%XMLPath%\*.xml" /B 2^>nul') Do (
	Set Prefix=&Set InsuranceNumber=0
	For /F "tokens=1,2 delims=_" %%P In ("%%~F") Do (Set Prefix=%%P)
	For /F "tokens=2 delims=><" %%N In ('grep -Eo "<InsuranceNumber>[^<]*</InsuranceNumber>" "%XMLPath%\%%F"') Do (
		If Not %%N==/InsuranceNumber Set InsuranceNumber=%%N
	)
	Call :StringLen "!InsuranceNumber!"
	If !$StringLen!==5 (Echo !Prefix!_!InsuranceNumber!|recode utf8..cp1251/>>"result_5and6.txt")
	If !$StringLen!==6 (Echo !Prefix!_!InsuranceNumber!|recode utf8..cp1251/>>"result_5and6.txt")
	If Not !$StringLen!==5 (
		If Not !$StringLen!==6 (
			Echo !Prefix!_!InsuranceNumber!|recode utf8..cp1251/>>"result_other.txt"
		)
	)
)
Pause&Exit
:StringLen
:: Автор функции - amel27, viewtopic.php?p=68849#p68849
   Set $StringLen=0&Set $StringBuf=%~1
   If ""=="%~1" GoTo :EOF
:StringLenLoop
   Set /A $StringLen+=1
   Call Set $StringChr=%%$StringBuf:~%$StringLen%%%
   If ""=="%$StringChr%" GOTO :EOF
GoTo :StringLenLoop
Аватара пользователя
Guest

Re: CMD/BAT - [решено] вывод строки из *.xml

Сообщение Guest »

при этом создается пустой файл result_5and6.txt, в нужной кодировке ANSI, а файл result_other.txt вообще не создается
Аватара пользователя
LAKERS824

Re: CMD/BAT - [решено] вывод строки из *.xml

Сообщение LAKERS824 »

при этом создается пустой файл result_5and6.txt, в нужной кодировке ANSI, а файл result_other.txt вообще не создается
Аватара пользователя
LAKERS824

Re: CMD/BAT - [решено] вывод строки из *.xml

Сообщение LAKERS824 »

LAKERS824, к сожалению, я не телепат, чтобы определить кодировку ваших xml-файлов. Судя по тому, что файлы с результатами создавались в utf-8, я предположил, что xml в такой же кодировке, и вписал пару "utf8..cp1251/" в скрипт. Уточните, в какой именно они кодировке и исправьте её в скрипте самостоятельно - либо приложите несколько заархивированных xml для образца, чтобы я сам исправил.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»