CMD/BAT - Bat поиск строчки в xml файле закодированого pbase64

Аватара пользователя
ivsh01

CMD/BAT - Bat поиск строчки в xml файле закодированого pbase64

Сообщение ivsh01 »

Привет, Ребята!



Помогите решить задачку.



Есть файл такого вида (он в одну строчку):



PD94bWwgdmVycTEST7uvK7u3y8O7r/TEsSTyAvPjwvyN3RMT4=bzBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBAAA=bzBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB AAA=



Нужно:



Извлечь значение из тега ЭС где он всегда будет начинаться с >PD и заканчиваться то есть получить вот эти символа: PD94bWwgdmVycTEST7uvK7u3y8O7r/TEsSTyAvPjwvyN3RMT4=
Аватара пользователя
ivsh01

Re: CMD/BAT - Bat поиск строчки в xml файле закодированого pbase64

Сообщение ivsh01 »

Цитата alpap:



Надеюсь здесь:

Цитата:

...ИдДанныхТК="1">
Аватара пользователя
alpap

Re: CMD/BAT - Bat поиск строчки в xml файле закодированого pbase64

Сообщение alpap »

Цитата ivsh01:



можно поправить?
CMD/BAT - Bat поиск строчки в xml файле закодированого pbase64




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

@echo off
>nul chcp 1251
<"file.xml" (for /f "delims=" %%a in ('find /v ""') do @set "s=%%a")
for %%m in ("%s:><=" "%") do for /f "tokens=2 delims=><" %%a in ('echo "%%~m"^|find "</ЭС"') do echo %%a
>nul chcp 866
pause
Аватара пользователя
ivsh01

Re: CMD/BAT - Bat поиск строчки в xml файле закодированого pbase64

Сообщение ivsh01 »

Спасибо огромное! Прямо то, что нужно!!!



Только не пойму как этот код в крутить в цикл for когда файлов 100 штук с которыми нужно провести это манипуляцию.



на выходе получить тоже 100 файлов с этим содержимым



----

Следующее использование оператора пути при подстановке параметров

в пакетных файлах является недопустимым: %~m"^|find "
Аватара пользователя
alpap

Re: CMD/BAT - Bat поиск строчки в xml файле закодированого pbase64

Сообщение alpap »

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

но вообще не для cmd задача, столкнетесь с проблемами и похлеще и спецсимволы и кодировки и концы строк и длина строки и главное скорость выполнения

попросите сделать на vbs/js или PowerShell
Аватара пользователя
megaloman

Re: CMD/BAT - Bat поиск строчки в xml файле закодированого pbase64

Сообщение megaloman »

Цитата alpap:



не для cmd задача, .... попросите сделать на vbs/js
CMD/BAT - Bat поиск строчки в xml файле закодированого pbase64







CMD+js. CMD сохранить в 866 кодировке

[spoiler]

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

@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);
[/spoiler]

Цитата ivsh01:



Только не пойму как этот код в крутить в цикл for когда файлов 100 штук с которыми нужно провести это манипуляцию. на выходе получить тоже 100 файлов с этим содержимым
CMD/BAT - Bat поиск строчки в xml файле закодированого pbase64







Если делать из ста файлов *.xml txt-файлы c тем же именем

[spoiler]

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

@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);
[/spoiler]
Аватара пользователя
gf100

Re: CMD/BAT - Bat поиск строчки в xml файле закодированого pbase64

Сообщение gf100 »

Пытаюсь приспособить скрипт к своему случаю, но туплю.

Прошу помочь:

есть XML в одну строку, длина файла может достигать 100к, в первых 200 символах есть подстрока (атрибут) EDate="2017-03-22", перед ней и после пробелы. Надо достать значение "2017-03-22" и положить этот файл в архив с таким именем.



вариант из
CMD/BAT - Как получить значение искомой подстроки в строке?
не проходит по причине длины файла.
Аватара пользователя
megaloman

Re: CMD/BAT - Bat поиск строчки в xml файле закодированого pbase64

Сообщение megaloman »

gf100,


Попробуйте эдак

[spoiler]Код:[/spoiler]

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

@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);

Если нужен один файл, напишите его имя

Код:

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

Set "FileIn=Z:\Box_In\У попа была собака.xml"

Батник сохранить в 866 кодировке

Строку для архивирования, надеюсь, напишите сами вместо или после Echo %1 %~2




Подозреваю, это плохой путь. Наверное, для xml-файлов есть другие способы извлечения
Аватара пользователя
greg zakharov

Re: CMD/BAT - Bat поиск строчки в xml файле закодированого pbase64

Сообщение greg zakharov »

Цитата gf100:



Прошу помочь



Берете
sed
и в консольке отдаете команду:



Код:

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

sed -nr "s|.+\sEDate=\"(....-..-..)\".+|\1|p" my.xml
Ответить

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