Войти

Показать полную графическую версию : [решено] findstr помощь


Страниц : 1 [2]

sov44
09-08-2013, 20:10
Попробовал изменить скрипт под ТЗ
@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, не могли бы вы разъяснить регулярные выражения в скрипте?

Iska
10-08-2013, 00:41
sov44, к сожалению, подтверждаю.

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

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

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

Foreigner
10-08-2013, 10:09
Iska, Можно с помощью Select-String (sls) -- аналога findstr или grep:

(gci *.msp -rec).fullname | sls -case '^.*\\[0-9a-z][^\\]*\.msp$'

Iska
10-08-2013, 10:52
Foreigner, мне показалось нагляднее использовать свойство «.Name».

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

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

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

P.S. воздержусь от примеров - не в том состоянии)

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

Iska
12-10-2013, 12:17
Как вывести имя папки типа 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» — формат действительно единый.




© OSzone.net 2001-2012