2015-07-05 5 views
1

Я хотел бы найти способ поиска конкретных каталогов на определенном пути или диске и распечатать их в файл для дальнейшего использования.Поиск каталогов в пакетном режиме - сохранить весь путь в файле

Например, в структуре, как:

D:\Dir1\Dir2\Wanteddir 
D:\Dir1\Dir3\Wanteddir 
D:\Dir1\Dir4\Wanteddir 

он должен создать файл «Result.txt» с точно такой же схеме, как описано выше.

Теперь я создал сценарий с нуля и некоторые исследования существующих скриптов. И получил эту работу.

@echo off 
setlocal enabledelayedexpansion 

set "tmp_result_file=temp.txt" 
set "result_file=result.txt" 

if exist %tmp_result_file% del %tmp_result_file% 
if exist %result_file% del %result_file% 

dir d: /s > temp.txt 

set /p searchdir=Please enter the directory name: 

for /f "tokens=3* delims= " %%i in ('FINDSTR /C:"\%searchdir%" %tmp_result_file%') do echo %%i >> %result_file% 
for /f "tokens=1,2,3 delims= " %%a in ('find /C "\%searchdir%" %result_file%') do set "amount=%%c" 

echo. 

Echo The list of found directories is %amount% lines long and contains  following paths. 
echo. 
type result.txt 

Теперь проблема с этим кодом заключается в том, что он «ловит» все каталоги, содержащие введенное слово. В начале имени каталога.

Так что, если я вхожу просто «Wanted» вместо «Wanteddir» сценарий будет искать для всех каталогов, начинается с «Wanted»

Например:

D:\Dir1\Dir2\Wanteddir 
D:\Dir1\Dir3\Wanteddir 
D:\Dir1\Dir4\Wanteddir 
D:\Wanted\Exampledir 
D:\Dir1\Wantedtest\Exampledir 
etc.. 

Я был бы признателен любые предложения для этой проблемы. Возможно, вы также можете предложить несколько более надежный метод для поиска, подобного этому. Другая проблема заключается в том, что «delims» - это пространство. Поэтому, если кто-то использует пробел в имени каталога, выход будет также мусором.

thx до сих пор.

+0

Не связанный с вопросом, который вы задаете, но вы предполагаете, что любое имя без расширения всегда является папкой, но это необязательно верно. – dbenham

ответ

0

Точное совпадение

dir /s /b /ad wanted 

или

Содержит хотел

dir /s /b /ad *wanted* 

Чтобы поместить в файл на рабочем столе

dir /s /b /ad *wanted* > "%userprofile%\desktop\Results.txt" 

Всегда смотрите на dir и forfiles для записи и поиска файлов.

+0

-1, вы должны всегда проверять свой код перед отправкой! (Должен признаться, иногда я этого не делаю, и мой пост часто страдает, когда я не тестирую). OP явно говорит, что ищет определенное имя папки без подстановочных знаков. Ваше решение кажется логичным, но оно просто не работает. – dbenham

0

Нет необходимости сначала получать список всех файлов/папок - вы можете перейти прямо к ответу.

Можно подумать, что dir /b /s /ad d:wantedDir будет работать.

К сожалению, если вы делаете DIR на имя папки, без каких-либо групповых символов, то команда DIR предполагает, что вы хотите посмотреть в этой папке, а не список, что конкретное имя папки :-(

Решение заключается в добавить подстановочные, но затем трубы, чтобы результат Findstr отсеять нежелательные папки:.

dir /b /s /ad d:wantedDir* | findstr /iec:"\\wanteddir" >result.txt 

опция /I делает поиск игнорировать регистр

опция /E делает поиск MATC h только конец каждой строки.

Опция /C обеспечивает поиск в литеральном поиске и позволяет пробелы в поиске.

Ведущий \\ представляет собой один \, это нечетное причуда, что буквальные поиски Findstr иногда требуют, чтобы обратные косые быть экранированы, как \\.