2

Я хочу найти файл на диске C:. Я точно знаю, что он не существует в определенном каталоге (ях) (скажем, Program Files). Поэтому, чтобы сократить время поиска, я хочу, чтобы Windows исключала поиск в этих конкретных папках. Как я могу выполнить такой поиск (который ищет на диске C, но может пропустить определенные папки)?

Я бы предпочел, чтобы ответ был методом поиска Windows, но я не против того, чтобы он был скриптом или другой простой программой.

5 ответов5

2

В качестве альтернативы, если вы не хотите использовать стороннее программное обеспечение, вы действительно можете сделать это из командной строки.

Работать с именами каталогов, в которых есть пробел, например, C:\Program Files довольно сложно, поэтому в Windows 7 у меня получилось:

@echo off
for /f "tokens=*" %%A in ('dir /b /ad C:\') do (
    if "C:\%%A"==%2 (
        echo Not scanning %2
    ) else (
        dir /s /b "C:\%%A\%1"
    )
)

Использование: file.bat file_to_be_searched.extension "C:\directory\not\to\search"

Обратите внимание на "" в каталоге, вы должны использовать его для работы скрипта.

Что это делает: Для каждой строки (всех символов) вывода команды dir /b /ad C:\ , которая перечисляет каталоги в C:\ , выполните:

Если C:\directory - это your_directory , не сканируйте его. Иначе, ищите файл, который вы указали в нем.

Пример (я назвал search.bat и поместил файл с именем a.txt в C:\Program Files)

C:\Users\XXXX\Desktop>search.bat a.txt "C:\Windows"
File Not Found
File Not Found
File Not Found
File Not Found
File Not Found
C:\Program Files\a.txt
File Not Found
File Not Found
File Not Found
File Not Found
File Not Found
Not scanning "C:\Windows"

Вы можете адаптировать скрипт так, чтобы он не осуществлял поиск в нескольких каталогах, добавляя больше операторов if .

PS: я забыл упомянуть, это будет искать только в папке root, то есть C:\ . Если вы хотите искать папки в другом месте, вам придется адаптировать скрипт. Приветствия.

0

Ditch Windows Поиск FileSeek. Это бесплатно. Вы можете исключить каталоги, искать содержимое файлов и т.д. Сохраняйте мою шкуру неоднократно. Стоит попробовать:

http://www.fileseek.ca/

0

Если вам нужна программа, я бы порекомендовал AgentRansack от MythicSoft. Это бесплатно, быстро и мощно, с небольшой площадью.

0

В соответствии с ответом пользователя 117893 и использованием команды dir в цикле for . Вы можете использовать robocopy или xcopy с параметром /L (только список) для поиска файлов.

Robocopy

Просто укажите начальный каталог C:\ и имя целевого файла *File.txt

robocopy C:\ %Temp% *File.txt /S /XD Windows "Program Files" "Program Files (x86)" /XJ /L /NS /NC /NDL /NP /NJH /NJS

Выход

C:\Users\Username\Desktop>robocopy C:\ %Temp% *Snapshot.txt /S /XD Windows "Program Files" "Program Files (x86)" /XJ /L /NS /NC /NDL /NP /NJH /NJS

                            C:\Temp\2013-02-13-1408-31_Snapshot.txt
                            C:\Temp\2013-02-13-1523-47_Snapshot.txt
                            C:\Temp\2013-02-13-1534-17_Snapshot.txt
                            C:\Temp\2013-02-13-1535-55_Snapshot.txt
                            C:\Temp\2013-02-13-1537-44_Snapshot.txt
                            C:\Temp\2013-02-18-1552-44_Snapshot.txt
                            C:\Temp\2013-02-18-1553-21_Snapshot.txt
                            C:\Temp\2013-02-18-1556-05_Snapshot.txt
                            C:\Temp\2013-02-18-1558-45_Snapshot.txt
                            C:\Temp\2013-02-18-1610-06_Snapshot.txt

хсору

Установка занимает пару дополнительных шагов.

  1. Необходимо создать текстовый файл exclude.txt содержащий ключевые слова, которые нужно исключить из поиска.
  2. Чтобы предотвратить сообщение об ошибке циклического копирования, необходимо создать временную букву диска или использовать другой диск в качестве целевого каталога.
  3. Затем укажите начальный каталог C:\ и имя целевого файла *File.txt

exclude.txt

\Windows\
\Program Files\
\Program Files (x86)\

команды

subst Z: %Temp%
xcopy C:\*File.txt Z:\ /S /L /EXCLUDE:exclude.txt
subst Z: \d

Выход

C:\Users\Username\Desktop>xcopy C:\*Snapshot.txt Z:\ /S /L /EXCLUDE:exclude.txt
C:\Temp\2013-02-13-1408-31_Snapshot.txt
C:\Temp\2013-02-13-1523-47_Snapshot.txt
C:\Temp\2013-02-13-1534-17_Snapshot.txt
C:\Temp\2013-02-13-1535-55_Snapshot.txt
C:\Temp\2013-02-13-1537-44_Snapshot.txt
C:\Temp\2013-02-18-1552-44_Snapshot.txt
C:\Temp\2013-02-18-1553-21_Snapshot.txt
C:\Temp\2013-02-18-1556-05_Snapshot.txt
C:\Temp\2013-02-18-1558-45_Snapshot.txt
C:\Temp\2013-02-18-1610-06_Snapshot.txt
10 File(s)

Заметки

Цель нужна только для использования команд (%Temp%), на самом деле ничего не копируется из-за /L

Обе команды выполнялись менее чем за пару секунд с перечисленными исключениями.

0

Способ сделать это внутри поиска Windows - использовать -folder(C:\Path) . Если имя папки уникально (по крайней мере, в отношении области поиска), вы можете просто использовать имя папки следующим образом: -folder(Program Files)

Если вы хотите включить подпапки в эту папку, вы можете использовать -foldername:(C:\Path)

Смотрите здесь для получения дополнительной информации. Я проверил это на Windows 7, и это работает. Не уверен насчет других версий.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .