![]() |
findstr помощь
Граждане!!
столкнулся с проблемой: суть: получить все *.xml файлы в данной папке, отвечающие критериям, в переменную (ну или сразу обработать данный файл) как делаю: Код:
findstr /m "<Cadastral_Block CadastralNumber=" "*.xml" каким образом For /F подключить ? |
Например, так:
Код:
@echo off |
Iska, Вы не ответили на вопрос и пометили тему решенной.
вопрос именно в том: Цитата:
Конструкция вида: Код:
setlocal enableextensions enabledelayedexpansion Возможно я не прав, тогда подправьте ;) |
просто проявите фантазию ))))
Код:
setlocal enableextensions enabledelayedexpansion |
firstarey, именно из-за того, что имена файлов перебираются внутри цикла — либо обрабатывайте их (файлы) там же, внутри цикла, либо выносите обработку в процедуру, вызываемую опять же изнутри цикла (как в примере коллеги zion87 выше).
|
Цитата:
фантазия применима когда знаешь как это сделать :)) нафантазировал следующее: когда в папке не осталось ни одного нужного файла, то встает на паузу |
firstarey, лишнего нафантазировали. Вам имена файлов для чего нужны?
|
Iska, все нормально нафантазировал, далее идет обработка файла:
1. считываем из него значения тегов 2. определяем тип документа (возможно 4 варианта) 3. перемещаем документ в каталог согласно заданной структуре папок 4. goto :poisk p.s. если вдруг интересно могу выложить все целиком |
firstarey, зачем Вам «goto :poisk», если все xml и так выбираются одним-единственным приведённым циклом?
|
Iska, выбираются то все, а имя берем одно, с ним работаем, перемещаем, потом снова выбираем все...
в данном варианте ЭТО работает. в моем случае актуальна фраза "плохой код, который работает, лучше чем красивый код, который не работает" (это я к тому, что возможно Вы увидите тут какие либо не совсем рациональные пути решения) Привожу весь батник Файл 97239, дабы было понятней как это происходит. p.s. сейчас вся проблема в том, что ко мне xml файлы попадают в виде "однострочного" приходиться блокнотом заменять "><" на ">/n<" лишь потом возможно обработать bat-ником |
Цитата:
Цитата:
|
Цитата:
еще разок: Файл 97252 и на всякий случай: http://anonymousdelivers.us/44622 |
Цитата:
|
Iska, есть идеи ?
|
firstarey, моя идея была изложена выше несколько раз: нет нужды в «ручном» цикле по «goto :poisk», поскольку «findstr.exe /m "<Cadastral_Block CadastralNumber=" "*.xml"» и так выбирает все потребные xml-файлы.
|
Подскажите, как избавится от сообщения "FINDSTR: // пропускается" http://savepic.org/3898391.jpg
Код:
@echo off |
Необходимо вывести имена файлов, начинающиеся с цифры или с буквы в нижнем регистре?
Код:
for /f "delims=" %%a in ('dir /b /s /a-d "%windir%\Installer\*" ^|findstr /rc:"[0-9]*.msp"') do echo %%a |
Код:
/rc:"[0-9]*.msp" |
Цитата:
Iska, как насчёт решения ТЗ в посте 17? |
Цитата:
Код:
@echo off Цитата:
И, ещё например, такое: Код:
D:\bla-bla-bla Вася Пупкин 123 ха-ха 3рmsp.exe |
Попробовал изменить скрипт под ТЗ
Код:
@echo off Iska, не могли бы вы разъяснить регулярные выражения в скрипте? |
sov44, к сожалению, подтверждаю.
Цитата:
Код:
^.*\\[0-9a-z][^\\]*\.[^\.\\]*$ произвольное количество любых символов; экранированный обратный слэш; один символ из указанного диапазона; произвольное число (в том числе и пустое) символов, не содержащих обратный слэш; точка; произвольное число (в том числе и пустое) символов, не содержащих точки и обратного слэша. Так это мыслилось. Очевидно, не всё гоже для «findstr.exe». sov44, переходите на PowerShell. Рекурсивная обработка, работа с регулярками — это его «коньки». Смотрите, как всё просто и замечательно: Код:
Get-ChildItem -Recurse -Include *.msp |` |
Iska, Можно с помощью Select-String (sls) -- аналога findstr или grep:
Код:
(gci *.msp -rec).fullname | sls -case '^.*\\[0-9a-z][^\\]*\.msp$' |
Foreigner, мне показалось нагляднее использовать свойство «.Name».
|
Цитата:
[a-z] соответствует интервалу ряда [aAbBcC ... xXyYzZ], т.е.: - символ Z выпадает из такого интервала, правильно будет [a-Z] )) - интервал класса нормально работает для символов, не являющихся буквами; - регистрозависимый интервал требует тупого перечисления БУКВ; - для русских букв можно использовать трикс с WIN-кодировкой P.S. воздержусь от примеров - не в том состоянии) |
Как вывести имя папки типа 05CE87A7-5F0B-4D90-BC77-81F960F22584 в директории %temp% windows7, чтобы в дальнейшем её удалить?
Не работает, видимо не до конца разобрался с регулярными выражениями Код:
findstr /rc:".*-*" "%temp%" |
Цитата:
Код:
@echo off Update: посмотрел сейчас с помощью «GUIDGEN.EXE» — формат действительно единый. |
Время: 16:46. |
Время: 16:46.
© OSzone.net 2001-