Показать полную графическую версию : [решено] findstr помощь
Попробовал изменить скрипт под ТЗ
@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, не могли бы вы разъяснить регулярные выражения в скрипте?
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$'
Foreigner, мне показалось нагляднее использовать свойство «.Name».
не всё гоже для «findstr.exe»»если речь про интервалы в классе, то у FINDSTR своя логика:
[a-z] соответствует интервалу ряда [aAbBcC ... xXyYzZ], т.е.:
- символ Z выпадает из такого интервала, правильно будет [a-Z] ))
- интервал класса нормально работает для символов, не являющихся буквами;
- регистрозависимый интервал требует тупого перечисления БУКВ;
- для русских букв можно использовать трикс с WIN-кодировкой
P.S. воздержусь от примеров - не в том состоянии)
Как вывести имя папки типа 05CE87A7-5F0B-4D90-BC77-81F960F22584 в директории %temp% windows7, чтобы в дальнейшем её удалить?
Не работает, видимо не до конца разобрался с регулярными выражениями findstr /rc:".*-*" "%temp%"
pause
глобальная задача тут http://forum.oszone.net/thread-267542.html
Как вывести имя папки типа 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.