Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] вывод строки из *.xml

Ответить
Настройки темы
CMD/BAT - [решено] вывод строки из *.xml

Пользователь


Сообщения: 52
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день!

Есть папка, в которую закачиваются файлы с ftp несколько раз в день.
Названия файлов типа:3143719278_1605201290029.xml

Необходимо прочитать все файлы в папке, и вывести из каждого файла то, что содержится в строке

<InsuranceNumber>94595</InsuranceNumber> , т.е. в этом случае вывести 94595.

Причем итоговое значение д.б. таким : первая часть имени файла остается той же, т.е. 3143719278, а через _ добавляем 94595.

Получаем на выходе: 3143719278_94595

Если же поле InsuranceNumber пустое, то вывести 3143719278_0.



Каким образом это можно сделать или вообще можно?

Отправлено: 16:46, 28-06-2012

 

Пользователь


Сообщения: 52
Благодарности: 0

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@Echo on

SetLocal EnableDelayedExpansion
Set Path=%Path%;C:\Users\Diman\Desktop\KDL\grep+parseXML\bin

Set XMLPath=C:\Users\Diman\Desktop\KDL\XML

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&Set Suffix=%%Q)
	For /F "tokens=2 delims=><" %%N In ('grep -Eo "<LastName>[^<]*</LastName>" "%XMLPath%\%%F"') Do (If Not %%N==/LastName Set LastName=%%N)
	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!_!LastName!|recode utf8..cp1251/>>"C:\Users\Diman\Desktop\KDL\result5and6.txt")
	If !$StringLen!==6 (Echo !Prefix!_!InsuranceNumber!_!LastName!|recode utf8..cp1251/>>"C:\Users\Diman\Desktop\KDL\result5and6.txt")
	If Not !$StringLen!==5 (
		If Not !$StringLen!==6 (
			Echo !Prefix!_!InsuranceNumber!_!LastName!|recode utf8..cp1251/>>"C:\Users\Diman\Desktop\KDL\result_other.txt"
		)
	)
)
Pause&Exit

:StringLen
:: Автор функции - amel27, http://forum.oszone.net/post-1162296-2.html
   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
Запускаю с небольшой модификацией, вытаскиваю еще и Фамилию дополнительно, не более

Отправлено: 20:09, 07-07-2012 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


LAKERS824, попробуйте запустить вот этот скрипт: http://rghost.ru/39092099
Настройки пути к xml вынесены в файл settings.ini. На вашем файле отработало успешно.

Отправлено: 22:45, 07-07-2012 | #22


Пользователь


Сообщения: 52
Благодарности: 0

Профиль | Отправить PM | Цитировать


В принципе работает, но я заметил следующее, если в строке

Код: Выделить весь код
Set Path=%Path%;%CD%\bin
я пишу свой путь, т.е.
Код: Выделить весь код
Set Path=%Path%;D:\KDL\grep+parseXML\bin
то файл и создается пустым. Не пойму в чем дело?

А если я оставляю
Код: Выделить весь код
%CD%\bin
, то вроде все ок, я же ведь более нигде не указываю %CD%

блин, на XP работает, как описал выше, переношу те же файлы на Windows 7 64-бит, меняю только пути и опять создается пустой файл один

Отправлено: 23:04, 07-07-2012 | #23


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


Объясните смысл замены %CD%\bin на вписанный вами вручную абсолютный путь? Не меняйте пожалуйста код, если он работает и нет веской причины его переделывать.
Почему именно после вашей модификации перестает работать точно не скажу, попробуйте сравнить вывод Echo %CD% с тем, что вы вписываете как абсолютный путь.

Отправлено: 23:17, 07-07-2012 | #24


Пользователь


Сообщения: 52
Благодарности: 0

Профиль | Отправить PM | Цитировать


перенес на 2003 винду, тоже создается пустой файл.


Set Path=%Path%;%CD%\bin - эта строка указывает пусть к grep+parseXML?
Ведь у меня в папке, скажем D:\papka есть папка grep+parseXML\bin, а также в корне papka\bin - которая от recode.
Так верхний путь не может находить неверный путь?

Отправлено: 23:43, 07-07-2012 | #25


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


Цитата LAKERS824:
Set Path=%Path%;%CD%\bin - эта строка указывает пусть к grep+parseXML? »
Эта строка разворачивается в текущую директорию и её поддиректорию bin, где находятся все необходимые бинарники (grep, recode) и библиотеки (pcre, iconv, intl)
Цитата LAKERS824:
а также в корне papka\bin - которая от recode »
Но зачем? Посмотрите на содержимое той директории bin, что в данном вам архиве, там уже есть recode.
Плюс к тому, преимущество записи Set Path=%Path%;%CD%\bin - в портабельности самого скрипта, в нем нету абсолютных путей, его можно переносить куда угодно, и на другом ПК он будет работать точно так же (если не забудут скопировать директорию bin вместе с ним).

Отправлено: 23:50, 07-07-2012 | #26


Пользователь


Сообщения: 52
Благодарности: 0

Профиль | Отправить PM | Цитировать


спасибо, разобрался с папкой bin и все встало на свои места. СПАСИБО.

Отправлено: 00:09, 08-07-2012 | #27



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] вывод строки из *.xml

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Win32 API - Вывод картинок Lev Программирование и базы данных 11 12-02-2010 19:38
MySQL - Автозамена строки из другой строки - trigger? procedure ? BugZZ Программирование и базы данных 0 18-09-2009 09:51
Вывод на печать???? Novistok Microsoft Windows NT/2000/2003 4 08-11-2005 10:52
Вывод на телевизор dascon Программное обеспечение Windows 15 04-09-2004 06:55
постраничный вывод chem1 Вебмастеру 4 16-01-2004 22:46




 
Переход