Unix-type "locate" в Windows?

С помощью CLI (cmd) Windows, как найти файл, который он знает, часть имени? Например, каждая рабочая станция Windows устанавливает javac в другом месте, как можно найти ее из командной строки Windows (cmd)?

Googling Я вижу упоминание только об использовании графического интерфейса Windows Explorer (файлового менеджера) или загрузке некоторого бесплатного приложения. У Windows действительно нет встроенной команды локации? Есть ли у него серверные версии? Я не хочу устанавливать cygwin или что-то еще, это, как правило, не мои машины.

  • Как вернуть все ячейки в строке, если первый столбец соответствует значению на другом листе
  • Как выполнять несколько команд при использовании find?
  • Почему может -exec повлиять на вывод find в Linux?
  • Как искать в PDF-файлах с использованием регулярных выражений?
  • Как искать все текстовые файлы в одной папке для ключевого слова в Windows Vista
  • Как подсчитать разные значения / символы в столбце ячеек?
  • Проверка файлов на внешнем диске на весь компьютер для дубликатов
  • Как можно установить операционную систему при отсутствии средств установки?
  • Как я могу визуализировать использование файловой системы в Windows?
  • Лицензия Windows с Thinkpad
  • Какую команду я могу использовать для перезагрузки загрузчика?
  • Где можно установить представление папки по умолчанию?
  • 8 Solutions collect form web for “Unix-type "locate" в Windows?”

    Вы должны быть в состоянии делать то, что вам нужно делать с dir :

     dir [filename] /s 

    Замените [имя_файла] на имя файла, которое вы ищете, вы должны иметь возможность использовать подстановочные знаки. / S делает поиск в подкаталогах, поэтому, если вам нужно, вы можете начать с корня C: и проверить его на весь диск.

    У Виндзоса самый простой ответ. Но если вы любите командную строку, вы можете захотеть взглянуть на PowerShell тоже. Чтобы выполнить тот же тип поиска, который вы использовали

     get-childitem [starting path eg c:\users\] -filter [wildcarded search or filename] -recurse 

    Который имеет приятное преимущество в том, что его можно закачивать в удобную инструкцию foreach и запускать процесс против результатов поиска.

     get-childitem [starting path eg c:\users\] -filter [wildcarded search or filename] -recurse | foreach ($_){ [do something to $_.fullname , like maybe display my image file or relocate it etc..] } 

    Я просто получил программу локации для Windows . Вам просто нужно следовать инструкциям для чтения и скопировать файлы .dll и .exe в system32.

    Альтернатива включает добавление пути к переменной среды PATH.

    Идея состоит в том, чтобы найти локализацию в Windows, если вы ищете что-то вроде «найти». 🙂

    Вопрос несколько неоднозначен.

    Вы хотите найти файл (указанный в теле OP), но вам также нужна команда / приложение «locate-type» (указано в названии). Существует одно тонкое соображение с огромными последствиями. Вы можете найти с помощью двух разных методов:

    1. Поиск целевой структуры дерева непосредственно в каждом поиске (медленный).

    2. Сначала создайте базу данных целевой структуры дерева (может занять много времени), а затем найдите путем поиска в базе данных (очень быстро). База данных должна периодически обновляться, чтобы получить хорошие результаты при поиске. См. http://en.wikipedia.org/wiki/Locate_%28Unix%29 .

    Расположение Unix имеет «тип 2», но в соответствии с телом вашего OP вы можете быть в порядке с любым из двух методов. Более того, вы спрашиваете конкретно о вариантах CLI.

    Ниже перечислены некоторые параметры, и я указываю, являются ли они CLI / GUI, тип 1/2, и я добавляю некоторые комментарии.

    1. http://locate32.cogit.net/ (уже указывал Джон Т, а затем Чику ). GUI, тип 2. Имеется переносная версия. Отличная простота использования и конфигурируемость. Очень похож на Unix locate (который я использовал и очень любил).
      Примечание . Используется для Unix's Updatedb занимая довольно много времени для обновления базы данных (конечно, это зависит от размера отсканированного дерева), я нахожу locate32 чрезвычайно быстрым. Я не знаю, как это можно улучшить.

    2. http://sourceforge.net/projects/winlocate/ CLI, тип 2.

    3. Dir [filename] / s , решение от Windos . CLI, тип 1.

    4. Gci … , решение OldWolf . CLI, тип 1.

    5. http://gnuwin32.sourceforge.net/packages/findutils.htm CLI, тип 2.

    6. Все GUI, тип?.

    Не нужно устанавливать вручную. См. http://chocolatey.org

     choco install winlocate 

    Перезапустить среду оболочки

     Updatedb.bat -a Locate.bat somefile 

    Я знаю, что на этот ответ был дан ответ, но это мой скрипт для имитации функции locate, используемой в unix / linux

    Сохраните это как locate.bat и поместите в System32 ИЛИ запустите из каталога, в котором он хранится. Принимает один параметр, подобный этому "cmd> locate javac.exe"

    Переключатель locate / c (в качестве второго параметра будет подсчитывать количество экземпляров) и найдите /? Отобразит текст справки

     @echo off if [%1]==[] goto :usage if [%1] == [/?] ( :usage echo Usage: echo locate "filename" { optional } /c { shows counter } echo note: results are exported to C:\temp\result.txt goto :EOF ) else ( setlocal EnableDelayedExpansion dir /a /b /s C:\ | findstr /I "%1" > C:\temp\result.txt type C:\temp\result.txt | more /S set counter=0 if [%2] == [/c] ( for /F %%i in ('type C:\temp\result.txt') do ( set /a counter=!counter!+1 ) echo Total Matches: !counter! ) ) endlocal > nul goto :EOF 

    EDIT: (Обновленный скрипт, более организованный и может обрабатывать более разнообразные ситуации, например, для любого поискового термина, а не только для имени файла)

     @echo off ::initialize local varaibles to default values setlocal set file= set directory= set toppath=top ::some switch validation ( from command line ) if [%1]==[] goto :Usage if [%1]==[/?] goto :Usage if [%1]==[/help] goto :Usage ::handle switches with if structures if [%2]==[/c] ( set count=yes ) ELSE ( if [%2]==[/t] ( if [%3]==[] (goto :Usage) else (set toppath=%3)) if [%4]==[/c] ( set count=yes ) ELSE ( set count= ) ) set file=%1 ::Directory Validation ( Goto jumps possible, along with raptors ) if [%toppath%] == [] ( IF NOT EXIST %toppath% goto :FolderInvalid ) else ( if [%toppath%] neq [top] set directory=%toppath% ) set toppath= setlocal EnableDelayedExpansion ::Run Bulk of the Script dir /a /b /s %directory% | findstr /I "%file%" > C:\temp\result.txt type C:\temp\result.txt | more /S set counter=0 if [%count%]==[yes] ( for /F %%i in ('type C:\temp\result.txt') do ( set /a counter=!counter!+1 ) echo Total Matches: !counter! ) goto :End :Usage echo locate ^[file^] {term^/file to look for} ^| ^[^/t^] {dir^/subdirs to search} ^| ^[^/c^] {show counter} echo. echo notes to user: 1. Results are exported to C:\temp\result.txt echo 2. Default search dir is the current unless specified by ^/t switch echo 3. For best results write switches in order given ! ( or beware of raptors ) goto :End :FolderInvalid echo Folder Invalid :End endlocal > nul 

    Я создал порт PowerShell для локализации и updateb. Использует SQLite в качестве бэкэнд и имеет автоустановку. Просто

     .\Invoke-Locate.ps1 -install. 

    Поиск занимает около 300 мс / запрос.

    затем

     locate whatever 

    И вы настроены.

    Введите описание изображения здесь

    https://gallery.technet.microsoft.com/scriptcenter/Invoke-Locate-PowerShell-0aa2673a

    Я не знаю о методе CLI для этого в Windows. Имейте в виду, что CLI для Windows был оставлен обычными пользователями, поэтому он предлагает в целом менее зрелый набор инструментов. Лучше всего использовать gnu find в Windows, который вы можете получить от GnuWin32 . Если вы разрабатываете скрипт, вам просто нужно включить find.exe и его зависимости со сценарием (не волнуйтесь, он не очень большой).

    Давайте будем гением компьютера.