|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] вывод строки из *.xml |
|
CMD/BAT - [решено] вывод строки из *.xml
|
Пользователь Сообщения: 52 |
Профиль | Отправить PM | Цитировать Добрый день!
Есть папка, в которую закачиваются файлы с ftp несколько раз в день. Названия файлов типа:3143719278_1605201290029.xml Необходимо прочитать все файлы в папке, и вывести из каждого файла то, что содержится в строке <InsuranceNumber>94595</InsuranceNumber> , т.е. в этом случае вывести 94595. Причем итоговое значение д.б. таким : первая часть имени файла остается той же, т.е. 3143719278, а через _ добавляем 94595. Получаем на выходе: 3143719278_94595 Если же поле InsuranceNumber пустое, то вывести 3143719278_0. Каким образом это можно сделать или вообще можно? |
|
Отправлено: 16:46, 28-06-2012 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Вот, теперь всё предельно чётко, так бы сразу и сформулировали.
@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, 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 |
Отправлено: 13:47, 06-07-2012 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 52
|
Профиль | Отправить PM | Цитировать Anonymоus, огромнейшее спасибо.
|
Отправлено: 13:48, 06-07-2012 | #12 |
Пользователь Сообщения: 52
|
Профиль | Отправить PM | Цитировать По-умолчанию текстовый файл сохраняется в UTF формате. Можно ли сохранить его в ANSI?
|
Отправлено: 00:30, 07-07-2012 | #13 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать LAKERS824, утилита Recode из пакета unxutils поможет вам.
|
Отправлено: 00:46, 07-07-2012 | #14 |
Пользователь Сообщения: 52
|
Профиль | Отправить PM | Цитировать |
Отправлено: 01:26, 07-07-2012 | #15 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать 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, 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 |
Отправлено: 01:41, 07-07-2012 | #16 |
Пользователь Сообщения: 52
|
Профиль | Отправить PM | Цитировать при этом создается пустой файл result_5and6.txt, в нужной кодировке ANSI, а файл result_other.txt вообще не создается
|
Отправлено: 17:00, 07-07-2012 | #17 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать LAKERS824, к сожалению, я не телепат, чтобы определить кодировку ваших xml-файлов. Судя по тому, что файлы с результатами создавались в utf-8, я предположил, что xml в такой же кодировке, и вписал пару "utf8..cp1251/" в скрипт. Уточните, в какой именно они кодировке и исправьте её в скрипте самостоятельно - либо приложите несколько заархивированных xml для образца, чтобы я сам исправил.
|
Отправлено: 17:18, 07-07-2012 | #18 |
Пользователь Сообщения: 52
|
Профиль | Отправить PM | Цитировать вложил один xml
|
Отправлено: 17:22, 07-07-2012 | #19 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Тип XML: Конец строки - win (CR+LF), Кодировка - UTF8 без BOM
Файл с результатом, без recode: Конец строки - win (CR+LF), Кодировка - UTF8 без BOM Файл с результатом, в который всё писалось через recode: Конец строки - win (CR+LF), Кодировка - cp1251 Всё верно, пара кодировок правильная, вот результат обработки вашего xml: Вы точно запускаете мой скрипт без модификаций? Файлы не должны создаваться пустыми, у меня всё работает, и на тестовых файлах, и на вашем xml. |
Отправлено: 17:45, 07-07-2012 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|