CMD/BAT - [решено] поиск по xml

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

Re: CMD/BAT - [решено] поиск по xml

Сообщение Dragokas »

Цитата Diskretor:



приложенный Вами код не работает вообще
CMD/BAT - [решено] поиск по xml




виноват, поторопился, дважды For указал


Цитата Diskretor:



Так?
CMD/BAT - [решено] поиск по xml




да, goto в данном случае спасает от поиска всех результатов и получается только первый найденный.



благодарю за наводку Изображение
Аватара пользователя
firstarey

Re: CMD/BAT - [решено] поиск по xml

Сообщение firstarey »

суть:

последний кусок кода, комментарием выделена строка (83)

переменная не желает принимать значение которое ей хочу присвоить (видно по выводу echo)



при этом отдельно данный кусок кода прекрасно себя чувствует.

подозрения падают на %K_ucastok% что тут может быть не так ? голову сломал



сам скрипт целиком:


читать дальше »

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

@echo off
Color 0e
rem задаем переменные:
set File_name=file.xml
:: как бы имя проще получать ? так чтоб перетаскиваешь xml на
:: батник и батник в итоге получает имя xml файла
:: это что то типа:
:: set File_name=%1
set base_region=region.txt
set base_rayion=rayion.txt
set KPT=0
rem находим по тегу кадастровый номер:
For /F "tokens=2-5 Delims=<>:" %%a In ('find "<CadastralNumber>" ^<"%File_name%"') Do (
	set K_Region=%%a
	set K_Rayion=%%b
	set K_kvartal=%%c
	if %%d=="" (set KPT=1) else set K_uchastok=%%d
	goto :_ext1
)
:_ext1
rem выводим результат на экран:
if %KPT%==0 (
	echo ®, ¤*, нв® ‚›Џ€‘ЉЂ!!
	echo ====================
	echo %K_Region%:%K_Rayion%:%K_kvartal%:%K_uchastok%
	echo ====================
	echo.
)
if %KPT%==1 (
	echo ®, ¤*, нв® ЉЏ’!!
	echo ================
	echo %K_Region%:%K_Rayion%:%K_kvartal%
	echo ================
	echo.
)
rem находим название региона по номеру:
for /f "delims=] tokens=1*" %%a in ('find /n "%K_Region%" %base_region%') do (set T_Region=%%b)
set region=%T_Region:~4,50%
rem выводим результат на экран:
echo %T_Region:~1,50%
rem находим название района по номеру:
rem проверка на условный кад район
if %K_Rayion%==00 (
	set rayion=“б«®ў*л© Є*¤*бва®ўл© а*©®*
	echo 00=“б«®ў*л© Є*¤*бва®ўл© а*©®*
	goto :_ext2
)
for /f "delims=] tokens=1*" %%a in ('find /n "%K_Rayion%" %K_Region%_%base_rayion%') do (set T_Rayion=%%b)
set rayion=%T_Rayion:~4,50%
rem выводим результат на экран:
echo %T_Rayion:~1,50%
:_ext2
rem проверяем существует ли каталог:
rem %~p0
if NOT exist "%K_Region%_%region%\%K_Region%_%K_Rayion%_%rayion%\%K_Region%_%K_Rayion%_%K_kvartal%\" MD "%K_Region%_%region%\%K_Region%_%K_Rayion%_%rayion%\%K_Region%_%K_Rayion%_%K_kvartal%\"
rem подсчет количества символов в обозначении участка:
call :var_Count "%K_uchastok%" K_uchastok_zero
if %K_uchastok_zero%==1 set K_uchastok=000%K_uchastok%
if %K_uchastok_zero%==2 set K_uchastok=00%K_uchastok%
if %K_uchastok_zero%==3 set K_uchastok=0%K_uchastok%
goto :_ext3
:var_count
set var=%~1
if not defined var exit /b
set var=%var:~1%
set /a %2+=1
call :var_count "%var%" %2
exit /b
:_ext3
rem переименовываем файл:
if %KPT%==0 (
	set new_file_name=Љ‚‡“_%K_uchastok%_%date:~6,4%-%date:~3,2%-%date:~0,2%.xml
	echo Ќ®ў®Ґ Ё¬п д*©«*:=Љ‚‡“_%K_uchastok%_%date:~6,4%-%date:~3,2%-%date:~0,2%.xml
	echo Ќ®ў®Ґ Ё¬п д*©«*:=%new_file_name%
	rem именно тут каккая то проблема ^^
	rem т.е. в переменную не уходит значение
	echo %~p0%file_name%
	echo %~p0%new_file_name%
	ren %file_name% %new_file_name%
	pause
	move %new_file_name% "%K_Region%_%region%\%K_Region%_%K_Rayion%_%rayion%\%K_Region%_%K_Rayion%_%K_kvartal%\"
	echo Ќ®ў*п Ї*ЇЄ* д*©«*:="%K_Region%_%region%\%K_Region%_%K_Rayion%_%rayion%\%K_Region%_%K_Rayion%_%K_kvartal%\"
)
pause





отдельно проблемный кусок, работает без проблем:


читать дальше »

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

@echo off
set File_name=file.xml
set K_uchastok=0038
set new_file_name=Љ‚‡“_%K_uchastok%_%date:~6,4%-%date:~3,2%-%date:~0,2%.xml
echo Ќ®ў®Ґ Ё¬п д*©«*:=Љ‚‡“_%K_uchastok%_%date:~6,4%-%date:~3,2%-%date:~0,2%.xml
echo Ќ®ў®Ґ Ё¬п д*©«*:=%new_file_name%
echo %~p0%file_name%
echo %~p0%new_file_name%
ren %file_name% %new_file_name%
pause



весь набор прилагаю во вложении
Аватара пользователя
Dragokas

Re: CMD/BAT - [решено] поиск по xml

Сообщение Dragokas »

Новое значение, присвоенное переменной под скобками, циклом или конкатенацией команд (&), можно получить из нее, не выходя из этой же конструкции, раскрывая только через восклицательные знаки:



Код:

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

set new_file_name=value
(
  set new_file_name=new value
  echo %new_file_name%
  echo !new_file_name!
)

Это называется режим отложенного расширения переменных среды, который необходимо предварительно включить, расположив в начале пакетного файла директиву:



Код:

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

Setlocal EnableDelayedExpansion

либо запуская бат-файл следующим способом:



Код:

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

cmd /v:on /c batnik.bat

P.S. Чтобы не использовать несколько кодировок (обе Win-1251 и DOS OEM-866) в пакетном файле, достаточно сохранить файл любым вменяемым редактором (например, AkelPad) в кодировке DOS.
Аватара пользователя
firstarey

Re: CMD/BAT - [решено] поиск по xml

Сообщение firstarey »

Очередная заминка:



не все *.XML файлы отформатированы с переносом строки, т.е. попадаются файлы где нет переноса на след строку после закрытия тега, например фрагмент:



Код:

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

57401380000009

т.е. весь файл в одну строку.

соответственно


Цитата firstarey:



сам скрипт целиком:
CMD/BAT - [решено] поиск по xml




уже не может обработать файл..



через Notepad++ делается просто, но хочется автоматизировать процесс.



сейчас поиск номера (59:01:4410923:25) выполняется следующим образом:


читать дальше »




Код:

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

set File_name=file.xml
:: как бы имя проще получать ? так чтоб перетаскиваешь xml на
:: батник и батник в итоге получает имя xml файла
:: это что то типа:
:: set File_name=%1
set KPT=0
For /F "tokens=2-5 Delims=: " %%a In ('find "







Возможно ли как то через cmd реализовать замену ">перенос строки
Аватара пользователя
Iska

Re: CMD/BAT - [решено] поиск по xml

Сообщение Iska »

Цитата firstarey:



второй вопрос:

как бы имя обрабатываемого файла проще получать ? так чтоб перетаскиваешь xml на

батник и батник в итоге получает имя xml файла в переменную
CMD/BAT - [решено] поиск по xml






Код:

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

@echo off
setlocal enableextensions enabledelayedexpansion
set sFile=%~1
if defined sFile (
	if exist "%sFile%" (
		rem Здесь Ваш код
	) else (
		echo File [%sFile%] not found
	)
) else (
	echo Usage: %~0 ^
)
endlocal
exit /b 0
Ответить

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