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

Компьютерный форум 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

 

Ветеран


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

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


Попробовал изменить скрипт под ТЗ
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

for /f "delims=" %%i in (
	'dir /b /s /a:-d "%windir%\Installer\*.msp" ^| findstr.exe /r /c:"^.*\\[0-9a-z][^\\]*\.[^\.\\]*$"'
) do echo %%i
pause
endlocal
exit /b 0
однако, к сожалению, скрипт вывел имена файлов, начинающихся с верхнего регистра http://savepic.ru/4659738.jpg
Iska, не могли бы вы разъяснить регулярные выражения в скрипте?

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



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

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


Ветеран


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

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


sov44, к сожалению, подтверждаю.

Цитата sov44:
Iska, не могли бы вы разъяснить регулярные выражения в скрипте? »
Код: Выделить весь код
^.*\\[0-9a-z][^\\]*\.[^\.\\]*$
«^»/«$» — начало/конец строки;
произвольное количество любых символов;
экранированный обратный слэш;
один символ из указанного диапазона;
произвольное число (в том числе и пустое) символов, не содержащих обратный слэш;
точка;
произвольное число (в том числе и пустое) символов, не содержащих точки и обратного слэша.

Так это мыслилось. Очевидно, не всё гоже для «findstr.exe».

sov44, переходите на PowerShell. Рекурсивная обработка, работа с регулярками — это его «коньки». Смотрите, как всё просто и замечательно:
Код: Выделить весь код
Get-ChildItem -Recurse -Include *.msp |`
    ForEach-Object -Process {
        if($_.Name -cmatch "^[0-9a-z].*\.[^\.]*$") {
            $_.FullName
        }
    }
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:41, 10-08-2013 | #22


Ветеран


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

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


Iska, Можно с помощью Select-String (sls) -- аналога findstr или grep:
Код: Выделить весь код
(gci *.msp -rec).fullname | sls -case '^.*\\[0-9a-z][^\\]*\.msp$'

Последний раз редактировалось Foreigner, 10-08-2013 в 10:36.


Отправлено: 10:09, 10-08-2013 | #23


Ветеран


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

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


Foreigner, мне показалось нагляднее использовать свойство «.Name».

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


Googler


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

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


Цитата Iska:
не всё гоже для «findstr.exe»»
если речь про интервалы в классе, то у FINDSTR своя логика:
[a-z] соответствует интервалу ряда [aAbBcC ... xXyYzZ], т.е.:

- символ Z выпадает из такого интервала, правильно будет [a-Z] ))
- интервал класса нормально работает для символов, не являющихся буквами;
- регистрозависимый интервал требует тупого перечисления БУКВ;

- для русских букв можно использовать трикс с WIN-кодировкой

P.S. воздержусь от примеров - не в том состоянии)
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:16, 10-08-2013 | #25


Ветеран


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

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


Как вывести имя папки типа 05CE87A7-5F0B-4D90-BC77-81F960F22584 в директории %temp% windows7, чтобы в дальнейшем её удалить?
Не работает, видимо не до конца разобрался с регулярными выражениями
Код: Выделить весь код
 findstr /rc:".*-*" "%temp%"
pause
глобальная задача тут http://forum.oszone.net/thread-267542.html

Отправлено: 14:53, 11-10-2013 | #26


Ветеран


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

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


Цитата sov44:
Как вывести имя папки типа 05CE87A7-5F0B-4D90-BC77-81F960F22584 в директории %temp% windows7, чтобы в дальнейшем её удалить? »
sov44, если они все создаются по общему принципу, то, например, так:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (
	`2^>nul dir /b /a:d "%temp%\*." ^| findstr.exe /r /c:"^........-....-....-....-............$"`
) do echo rd /s /q "%temp%\%%~i"

endlocal
exit /b 0
Обратите внимание ещё на два момента: атрибуты каталога (добавьте параметр, если там нечто из набора «hsr»), и количество таких папок в «%temp%» — как определить, что найденная папка — искомая? Как обычно, уберите echo для реального удаления.

Update: посмотрел сейчас с помощью «GUIDGEN.EXE» — формат действительно единый.

Последний раз редактировалось Iska, 12-10-2013 в 12:32.

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

Отправлено: 12:17, 12-10-2013 | #27



Компьютерный форум 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




 
Переход