Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

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

Ответить
Настройки темы
CMD/BAT - [решено] findstr помощь

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


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

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


Граждане!!
столкнулся с проблемой:

суть:
получить все *.xml файлы в данной папке, отвечающие критериям, в переменную (ну или сразу обработать данный файл)

как делаю:
Код: Выделить весь код
findstr /m "<Cadastral_Block CadastralNumber=" "*.xml"
результат на экран выводиться как мне нужно, но вот как это в переменную загнать?
каким образом For /F подключить ?

Отправлено: 13:25, 08-04-2013

 

Ветеран


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

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


Например, так:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (`findstr.exe /m "<Cadastral_Block CadastralNumber=" "*.xml"`) do (
	echo %%~i
)

endlocal
exit /b 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:41, 08-04-2013 | #2



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

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


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


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

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


Iska, Вы не ответили на вопрос и пометили тему решенной.

вопрос именно в том:
Цитата firstarey:
как это в переменную загнать? »
надо именно занести в переменную имя XML файла (пусть даже первое из списка выдачи findstr или последнее, после обработки файл будет перемещен, далее снова поиск по findstr и так пока не закончатся xml файлы в папке)

Конструкция вида:
Код: Выделить весь код
setlocal enableextensions enabledelayedexpansion
for /f "usebackq delims=" %%i in (`findstr.exe /m "<Cadastral_Block CadastralNumber=" "*.xml"`) do (
	set file_name=%%~1
	echo %%~i
)
pause
echo %file_name%
pause
endlocal
exit /b 0
выдает "%~i"

Возможно я не прав, тогда подправьте

Отправлено: 08:58, 09-04-2013 | #3


Аватара для zion87

Старожил


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

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


просто проявите фантазию ))))
Код: Выделить весь код
setlocal enableextensions enabledelayedexpansion
for /f "usebackq delims=" %%i in (`findstr.exe /m "<Cadastral_Block CadastralNumber=" "*.xml"`) do (
	call :1 %%~i
)
goto:eof
endlocal
:1
set file_name=%1
echo %file_name%
pause

Последний раз редактировалось zion87, 09-04-2013 в 18:45.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:22, 09-04-2013 | #4


Ветеран


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

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


firstarey, именно из-за того, что имена файлов перебираются внутри цикла — либо обрабатывайте их (файлы) там же, внутри цикла, либо выносите обработку в процедуру, вызываемую опять же изнутри цикла (как в примере коллеги zion87 выше).

Отправлено: 02:31, 10-04-2013 | #5


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


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

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


Цитата zion87:
просто проявите фантазию )))) »
спасибо за помощь
фантазия применима когда знаешь как это сделать )

нафантазировал следующее:
читать дальше »
Код: Выделить весь код
:poisk
if not exist *.xml (
	echo обрабатывать то и нечего 
	echo выход.
	pause>nul
	exit
)
setlocal enableextensions enabledelayedexpansion
for /f "usebackq delims=" %%i in (`findstr.exe /m "<Cadastral_Block CadastralNumber=" "*.xml"`) do (
	echo обрабатываем файл:	%%~i
	echo --------------------------------------------------------------------------------
	call :obrabotka %%~i
)
goto:eof
endlocal

:obrabotka
set file_name=%1


когда в папке не осталось ни одного нужного файла, то встает на паузу

Отправлено: 08:52, 10-04-2013 | #6


Ветеран


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

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


firstarey, лишнего нафантазировали. Вам имена файлов для чего нужны?

Отправлено: 09:20, 10-04-2013 | #7


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


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

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


Iska, все нормально нафантазировал, далее идет обработка файла:
1. считываем из него значения тегов
читать дальше »
Код: Выделить весь код
:obrabotka
set file_name=%1

rem определяем дату формирования данных:
For /F "Tokens=2-4 Delims=>-<" %%a In ('C:\WINDOWS\system32\find.exe "<Date>" ^<"%File_name%"') Do (
	set DY=%%a
	set DM=%%b
	set DD=%%c
)

rem определяем номер документа:
For /F "Tokens=2 Delims=><" %%a In ('C:\WINDOWS\system32\find.exe "<Number>" ^<"%File_name%"') Do set Doc_Number=%%a

2. определяем тип документа (возможно 4 варианта)
3. перемещаем документ в каталог согласно заданной структуре папок
4. goto :poisk

p.s. если вдруг интересно могу выложить все целиком

Отправлено: 15:14, 10-04-2013 | #8


Ветеран


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

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


firstarey, зачем Вам «goto :poisk», если все xml и так выбираются одним-единственным приведённым циклом?

Отправлено: 16:31, 10-04-2013 | #9


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


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

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


Iska, выбираются то все, а имя берем одно, с ним работаем, перемещаем, потом снова выбираем все...

в данном варианте ЭТО работает. в моем случае актуальна фраза "плохой код, который работает, лучше чем красивый код, который не работает"
(это я к тому, что возможно Вы увидите тут какие либо не совсем рациональные пути решения)

Привожу весь батник Файл 97239, дабы было понятней как это происходит.

p.s.
сейчас вся проблема в том, что ко мне xml файлы попадают в виде "однострочного"
приходиться блокнотом заменять "><" на ">/n<" лишь потом возможно обработать bat-ником

Отправлено: 06:43, 11-04-2013 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как пользоваться ключем /A команды Findstr Dragokas Скриптовые языки администрирования Windows 7 07-09-2013 01:23
Вопрос - помощь корвин Ноутбуки 0 12-03-2013 14:44
CMD/BAT - [решено] Помогите с findstr dima05605 Скриптовые языки администрирования Windows 9 09-12-2012 19:50
CMD/BAT - [решено] Помогите с findstr dima05605 Скриптовые языки администрирования Windows 15 28-10-2012 19:49




 
Переход