|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Bat поиск строчки в xml файле закодированого pbase64 |
|
|
CMD/BAT - Bat поиск строчки в xml файле закодированого pbase64
|
Новый участник Сообщения: 3 |
Профиль | Отправить PM | Цитировать
Привет, Ребята!
Помогите решить задачку. Есть файл такого вида (он в одну строчку): <?xml version="1.0" encoding="windows-1251"?><ТК xmlns="urn:sss" ОтправительТК="dd" ПолучательТК="dd" ИмяЗадачи="dd" ДатаВремяТК="2018-02-01T15:41:29" УникИдТК="00000000-0000-0000-0000-000000000000"><ДанныеТК ИдДанныхТК="1"><ЭС Содержит="ИЭС1" ФорматЭС="XML" ШифрованиеЭС="Нет" ИмяФайлаЭС="_ies1.xml" КодЭС="0403203" ВидОрг="ТУ" КодОрг="45" УникИдЭС="00000000-0000-0000-0000-000000000000">PD94bWwgdmVycTEST7uvK7u3y8O7r/TEsSTyAvPjwvyN3RMT4=</ЭС><КА УстановленКА="ddddd">bzBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBAAA=</КА><Регистрация ПредставленВ="" ОтправительИсхТК="" ДатаВремяРегистрИсхТК="2" СпособПредставления="TTT" УникИдИсхТК="00000000-0000-0000-0000-000000000000" ИдДанныхИсхТК="1" /></ДанныеТК><КА УстановленКА="ddd">bzBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB AAA=</КА></ТК> Нужно: Извлечь значение из тега ЭС где он всегда будет начинаться с >PD и заканчиваться </ЭС> то есть получить вот эти символа: PD94bWwgdmVycTEST7uvK7u3y8O7r/TEsSTyAvPjwvyN3RMT4= |
|
Отправлено: 16:36, 09-02-2018 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать |
Отправлено: 01:34, 10-02-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Цитата alpap:
Но вот что то на реальных данных значение обрезается Как это можно поправить? <?xml version="1.0" encoding="windows-1251"?><ТК xmlns="urn:sss" ОтправительТК="dd" ПолучательТК="dd" ИмяЗадачи="dd" ДатаВремяТК="2018-02-01T15:41:29" УникИдТК="00000000-0000-0000-0000-000000000000"><ДанныеТК ИдДанныхТК="1"><ЭС Содержит="ИЭС1" ФорматЭС="XML" ШифрованиеЭС="Нет" ИмяФайлаЭС="_ies1.xml" КодЭС="0403203" ВидОрг="ТУ" КодОрг="45" УникИдЭС="00000000-0000-0000-0000-000000000000">PD94bWwgdmVyc2lvbj0iMS4wsFSDFSDFdfsdfsdf67dfgzd5g4gh46hsdLjEiINPt6OrI5Mjd0T0iMDAwMDAwM DMdsfkKDSFkSDFksdfkNUU4NTExQUYyRjhBIiDT7ejqyOTSyj0iMTNGNUJENjYtQjE2Ri00QjZGLTlFOUYtRTEzOUFCRDYwQkRFI iDI5MTg7e379dLKPSIxIj480OXq4s7d0SDK7uTU7vDs+z0iMDQwOTM1MCIgz+Xw6O7k6Pft7vHy/D0i5OXq4OTt4P8iIMLo5M7y9+Xy4D0i0eLu5O376SDu8vfl8iIgzvL3xODy4D0iMjAxOC0wMi0wMSIgwujkzvDjPSLKziIgyu7kz vDjPSI5MzciIM7K08Q9IjA0MDkzNTAiIM7KwNLOPSI0NSIgxODy4MLw5ez/1O7w7Ojw7uLgGFGFDFDGKJfksldjfSDKfjsdlkFDJSLKDFJSLD9gdfg9dfg9sg876fdg6dg5dfg9fdFDG&DE4LTAyLTAxVDE1OjU 3OjAzIiDE4Py4gdfzgFGFDGggdfgggsdfgsSDSDFSDFDSdgsdfgDgOjQ5OjE0IiDK7uTQ5efK7u3y8O7r/z0iMCIg0OXnyu7t8vDu6/89IvDg5+Tl6yDO3dEg7eUg8e7k5fDm6PIg7vjo4e7qIiDI5MTg7e379c7d0T0iMSI+PC/E4O3t++XO3dE+PC/I3dEyPg==</ЭС><КА УстановленКА="ddddd">bzBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBAAA=</КА><Регистрация ПредставленВ="" ОтправительИсхТК="" ДатаВремяРегистрИсхТК="2" СпособПредставления="TTT" УникИдИсхТК="00000000-0000-0000-0000-000000000000" ИдДанныхИсхТК="1" /></ДанныеТК><КА УстановленКА="ddd">bzBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB AAA=</КА></ТК> |
|
Отправлено: 16:18, 12-02-2018 | #3 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата ivsh01:
|
|
Отправлено: 01:47, 13-02-2018 | #4 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Спасибо огромное! Прямо то, что нужно!!!
Только не пойму как этот код в крутить в цикл for когда файлов 100 штук с которыми нужно провести это манипуляцию. на выходе получить тоже 100 файлов с этим содержимым ---- Следующее использование оператора пути при подстановке параметров в пакетных файлах является недопустимым: %~m"^|find "</ЭС"') do echo %%a >> 11111.txt |
|
Последний раз редактировалось ivsh01, 13-02-2018 в 11:32. Отправлено: 10:09, 13-02-2018 | #5 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать ivsh01,
во-первых все лучше делать в кодировке 866 во-вторых при уже текущих запросах, например: @echo off >nul chcp 1251 for /f "delims=" %%a in ('dir /a-d/b "Papka\*.xml"') do call :m "%%a" "%%~na_OUT.txt" >nul chcp 866 pause& exit :m <"%~1" (for /f "delims=" %%a in ('find /v ""') do @set "s=%%a") >"%~2" (for %%m in ("%s:><=" "%") do for /f "tokens=2 delims=><" %%a in ('echo "%%~m"^|find "</ЭС"') do @echo %%a) exit /b попросите сделать на vbs/js или PowerShell |
Отправлено: 11:53, 13-02-2018 | #6 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Цитата alpap:
CMD+js. CMD сохранить в 866 кодировке
@set @E=1; /* @Echo Off cls Set "FileIn=Z:\Box_In\У попа была собака.xml" Set T1=">PD" Set T2="</ЭС>" FOR /F "usebackq delims=" %%s IN (`2^>nul Cscript //NoLogo /E:jscript "%~dpnx0" "%FileIn%" %T1% %T2%`) DO Set "String=%%s" Echo %String% Pause GoTo :Eof */ var oArg = WScript.Arguments; if (oArg.Count()<3) WScript.Quit(1); var inFile,AllTxt; var FSO=WScript.CreateObject("Scripting.FileSystemObject"); try {inFile=FSO.OpenTextFile(oArg(0),1)} catch (err) {if (err != 0) {WScript.Echo(oArg(0)+" ErrorLevel=2: "+err.description);WScript.Quit(2)}} AllTxt=inFile.ReadAll(); inFile.Close(); var i1=AllTxt.indexOf(oArg(1)); if(i1<0) {WScript.Echo(oArg(1)+" not found in "+oArg(0)); WScript.Quit(2)} var i2=AllTxt.indexOf(oArg(2),i1); if(i2<0) {WScript.Echo(oArg(2)+" not found in "+oArg(0)); WScript.Quit(2)} WScript.Echo(AllTxt.slice(i1+oArg(1).length,i2)); WScript.Quit(0); Цитата ivsh01:
Если делать из ста файлов *.xml txt-файлы c тем же именем
@set @E=1; /* @Echo Off cls Set "FileIn=Z:\Box_In\*.xml" Set T1=">PD" Set T2="</ЭС>" FOR %%f IN ("%FileIn%") DO Echo %%f &Cscript //NoLogo /E:jscript "%~dpnx0" "%%f" %T1% %T2% "%%~dpnf.txt" Pause GoTo :Eof Echo %String% Pause GoTo :Eof */ var oArg = WScript.Arguments; if (oArg.Count()<4) WScript.Quit(1); var inFile,AllTxt; var FSO=WScript.CreateObject("Scripting.FileSystemObject"); try {inFile=FSO.OpenTextFile(oArg(0),1)} catch (err) {if (err != 0) {WScript.Echo(oArg(0)+" ErrorLevel=2: "+err.description);WScript.Quit(2)}} AllTxt=inFile.ReadAll(); inFile.Close(); var i1=AllTxt.indexOf(oArg(1)); if(i1<0) {WScript.Echo(oArg(1)+" not found in "+oArg(0)); WScript.Quit(2)} var i2=AllTxt.indexOf(oArg(2),i1); if(i2<0) {WScript.Echo(oArg(2)+" not found in "+oArg(0)); WScript.Quit(2)} //WScript.Echo(AllTxt.slice(i1+oArg(1).length,i2)); try {inFile=FSO.OpenTextFile(oArg(3),2,true)} catch (err) {if (err != 0) {WScript.Echo(oArg(3)+" ErrorLevel=3: "+err.description);WScript.Quit(3)}} inFile.Write(AllTxt.slice(i1+oArg(1).length,i2)); inFile.Close(); WScript.Quit(0); |
||
------- Последний раз редактировалось megaloman, 13-02-2018 в 14:42. Отправлено: 13:33, 13-02-2018 | #7 |
Ветеран Сообщения: 1664
|
Профиль | Отправить PM | Цитировать Пытаюсь приспособить скрипт к своему случаю, но туплю.
Прошу помочь: есть XML в одну строку, длина файла может достигать 100к, в первых 200 символах есть подстрока (атрибут) EDate="2017-03-22", перед ней и после пробелы. Надо достать значение "2017-03-22" и положить этот файл в архив с таким именем. вариант из этого поста не проходит по причине длины файла. |
------- Отправлено: 10:37, 23-03-2018 | #8 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать gf100,
Попробуйте эдак
@set @E=1; /* @Echo Off cls Set "FileIn=Z:\Box_In\*.xml" Set T1=" EDate=" Set T2=" " FOR %%f IN ("%FileIn%") DO ( FOR /F "usebackq delims=" %%s IN (`2^>nul Cscript //NoLogo /E:jscript "%~dpnx0" "%%~f" %T1% %T2%`) DO Call :Arhivator "%%~f" "%%~s" ) Pause GoTo :Eof :Arhivator Echo %1 %~2 GoTo :Eof */ var oArg = WScript.Arguments; if (oArg.Count()<3) WScript.Quit(1); var inFile,AllTxt; var FSO=WScript.CreateObject("Scripting.FileSystemObject"); try {inFile=FSO.OpenTextFile(oArg(0),1)} catch (err) {if (err != 0) {WScript.Echo(oArg(0)+" ErrorLevel=2: "+err.description);WScript.Quit(2)}} AllTxt=inFile.ReadAll(); inFile.Close(); var i1=AllTxt.indexOf(oArg(1)); if(i1<0) {WScript.Echo(oArg(1)+" not found in "+oArg(0)); WScript.Quit(2)} var i2=AllTxt.indexOf(oArg(2),i1+oArg(1).length); if(i2<0) {WScript.Echo(oArg(2)+" not found in "+oArg(0)); WScript.Quit(2)} WScript.Echo(AllTxt.slice(i1+oArg(1).length,i2)); WScript.Quit(0); Строку для архивирования, надеюсь, напишите сами вместо или после Echo %1 %~2 |
------- Последний раз редактировалось megaloman, 23-03-2018 в 11:40. Отправлено: 11:34, 23-03-2018 | #9 |
Забанен Сообщения: 793
|
|
Отправлено: 12:25, 23-03-2018 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Поиск слова в xml файле | Maks12 | Скриптовые языки администрирования Windows | 0 | 29-01-2018 10:11 | |
CMD/BAT - Поиск в html файле ip адресов и копирование их в новый txt. | 666egor666 | Тест-форум | 0 | 30-04-2015 11:31 | |
CMD/BAT - BAT поиск текста в файле с условием | rosalin | Скриптовые языки администрирования Windows | 10 | 05-05-2014 14:56 | |
[решено] Замена строчки в bat файле на несколько других | ZeroCrash | AutoIt | 4 | 02-07-2009 04:12 | |
Редактирование строчки в файле | slaine | Вебмастеру | 5 | 10-08-2005 00:36 |
|