Unikatowe „lokalizowanie” w systemie Windows?

17

Używając interfejsu wiersza polecenia systemu Windows (cmd), w jaki sposób można zlokalizować plik, który zna część nazwy? Na przykład każda stacja robocza systemu Windows instaluje javac w innym miejscu, jak można go znaleźć w interfejsie CLI systemu Windows (cmd)?

Googling Widzę tylko wzmiankę o korzystaniu z GUI Eksploratora Windows (menedżera plików) lub pobieraniu darmowej aplikacji. Czy system Windows naprawdę nie ma wbudowanego polecenia lokalizacji? Czy mają to wersje serwerowe? Ja nie chce zainstalować cygwin lub cokolwiek innego, nie są one zazwyczaj moje maszyny.

dotancohen
źródło
3
Nic wbudowanego do wiersza poleceń systemu Windows nie jest podobne do lokalizacji. Polecam locate32 ( locate32.net )
John T
javacpowinien zwykle znajdować się w tym samym miejscu ...
Tamara Wijsman
1
@JohnT ta lokalizacja już nie działa - zaktualizowana strona domowa locate32
TrojanName
1
Wypróbuj Git-Bash.exe aka MINGW, który zawiera locatei updatedb--per stackoverflow.com/questions/36841241/…
MarkHu

Odpowiedzi:

22

Powinieneś być w stanie zrobić to, co musisz zrobić z dir:

dir [filename] /s

Zamień [nazwa pliku] na nazwę pliku, której szukasz, powinieneś być w stanie używać symboli wieloznacznych. / s sprawia, że ​​przeszukuje podkatalogi, więc jeśli zajdzie taka potrzeba, możesz uruchomić w katalogu głównym C: i sprawić, by sprawdził cały dysk.

Windos
źródło
Jeśli przeszukujesz cały dysk w poszukiwaniu wspólnej nazwy pliku, warto również dołączyć opcję / p, aby wyświetlała tylko stronę wyników na raz.
Windos
Dziękuję, wygląda idealnie. Często wiem przynajmniej, że muszę wyszukiwać w C: \ WINDOWS, aby skrócić czas wyszukiwania.
dotancohen
1
Nie sądzę, że javacjest zainstalowany C:\WINDOWS...
Tamara Wijsman,
Nie działa z wieloma dyskami / partycjami. A nawet w 2011 roku miałem więcej niż tylko lokalizację C: Linux nie dba o systemy plików.
Jürgen A. Erhard
1
@ JürgenA.Erhard, aby być uczciwym ... Sam Linux tak naprawdę nie dba o „systemy plików”, ponieważ Windows je przedstawia (według mojego ograniczonego zrozumienia). W dzisiejszych czasach, jeśli chcesz przeszukiwać więcej niż jeden dysk, PowerShell byłby moim wyborem jednak, ponieważ będziesz w stanie zgrupować wszystkie swoje woluminy i na wszystkich z nich ustawić Get-ChildItem.
Windos
12

Nikt nie mówi o poleceniu „gdzie”? przeszukuje plik wykonywalny w PATH bieżącego środowiska.

where <executable>

c:\ where
The syntax of this command is:

WHERE [/R dir] [/Q] [/F] [/T] pattern...

Description:
    Displays the location of files that match the search pattern.
    By default, the search is done along the current directory and
    in the paths specified by the PATH environment variable.
Kuddusi Çiftçibaşı
źródło
4

Windos ma najprostszą odpowiedź. Ale jeśli lubisz wiersz poleceń, możesz także przyjrzeć się PowerShell. Aby wykonać ten sam typ wyszukiwania, którego użyjesz

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

Ma to tę zaletę, że można ją przepompować do poręcznej instrukcji foreach i uruchomić proces w stosunku do wyników wyszukiwania.

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..]
    }
OldWolf
źródło
3
To wydaje się zbyt długie, aby pisać.
Tamara Wijsman
2
Get-ChildItem można skracać jako gcilub ls.
digitxp
Na szczęście, inaczej niż w cmd, PowerShellmożesz użyć „Tab”, aby zobaczyć sugestie, jak w Linuksie. Więc nie ma tak wielu do pisania. I w moim przypadku lsPowerShell nie działa.
WesternGun,
3

Po prostu mam program do lokalizowania dla systemu Windows . Wystarczy postępować zgodnie z instrukcjami dotyczącymi odczytu i skopiować pliki .dll i .exe do systemu32.

Alternatywą jest dodanie ścieżki programu do zmiennej środowiskowej PATH.

Pomysł polega na znalezieniu lokalizacji w systemie Windows, jeśli szukasz czegoś takiego jak „zlokalizuj”. :)

Cheeku
źródło
Dziękuję Cheeku, to wygląda jak przydatna aplikacja. Wspomniałem jednak, że nie mogę instalować aplikacji w systemie, ponieważ zazwyczaj nieto moje systemy.
dotancohen,
2
Tak, ale i tak odpowiedziałem, ponieważ inne osoby, takie jak ja, mogą uznać je za przydatne, a inni nie będą zdezorientowani, ponieważ ten post ma już zaakceptowaną odpowiedź!
Cheeku
1
locatejest na moim komputerze z Win7. Skarży się na to, że baza danych ma 435 dni, kiedy instalacja nie ma więcej niż 3 miesiące. I updatedbnie jest wliczony w cenę.
vinnief
@vinnief To chyba szczególny problem z twoją instalacją.
Cheeku
1
@Cheeku - Jest to ta sama aplikacja wskazał na Johna T . To nie jest CLI, jak poprosił OP, ale jest niesamowity.
sancho.s Przywróć Monikę
2

Pytanie jest nieco dwuznaczne.

Chcesz zlokalizować plik (podany w treści OP), ale chcesz także polecenie / aplikację typu „zlokalizuj” (podaną w tytule). Jest jedna subtelna uwaga z ogromnymi implikacjami. Możesz zlokalizować za pomocą dwóch różnych metod:

  1. Przeszukiwanie docelowej struktury drzewa bezpośrednio przy każdym wyszukiwaniu (powoli).

  2. Najpierw utworzenie bazy danych struktury drzewa docelowego (może być czasochłonne), a następnie zlokalizowanie poprzez przeszukiwanie bazy danych (bardzo szybko). Baza danych musi być okresowo aktualizowana, aby uzyskać dobre wyniki wyszukiwania. Zobacz http://en.wikipedia.org/wiki/Locate_%28Unix%29 .

Unix locatejest „typu 2”, ale zgodnie z treścią twojego OP, będziesz w porządku z dowolną z dwóch metod. Ponadto pytasz konkretnie o opcje CLI.

Podaję poniżej niektóre opcje i określam, czy są to CLI / GUI, wpisz 1/2, i dodaję kilka komentarzy.

  1. http://locate32.cogit.net/ (wskazane już przez Johna T, a następnie przez Cheeku ). GUI, typ 2. Istnieje wersja przenośna. Wyjątkowa łatwość użycia i konfigurowalność. Bardzo podobny do Unixa locate(którego bardzo lubiłem).
    Uwaga : Przyzwyczajony do tego, że Unix Updatedbdość długo aktualizuje bazę danych (oczywiście zależy to od wielkości skanowanego drzewa), uważam, że jest locate32 bardzo szybki. Nie wiem, jak można to tak bardzo poprawić.

  2. http://sourceforge.net/projects/winlocate/ CLI, typ 2.

  3. dir [nazwa pliku] / s , rozwiązanie Windos . CLI, typ 1.

  4. gci ... , rozwiązanie OldWolf . CLI, typ 1.

  5. http://gnuwin32.sourceforge.net/packages/findutils.htm Interfejs CLI, typ 2.

  6. Wszystko GUI, wpisz?

sancho.s Przywróć Monikę
źródło
1
Dziękuję, to jest dobre wyjaśnienie i miłe podsumowanie opcji.
dotancohen
2

Nie trzeba instalować ręcznie. Zobacz http://chocolatey.org

choco install winlocate

Zrestartuj środowisko powłoki

Updatedb.bat -a
Locate.bat somefile
Jonathan
źródło
1
winlocate nie jest (już) na Chocolatey.
Lennart,
2

Wiem, że odpowiedziano na to dawno temu, ale to jest mój skrypt do symulacji funkcji lokalizowania używanej w unix / linux

Zapisz to jako locate.bat i umieść w System32 LUB uruchom z katalogu, w którym jest przechowywany. Pobiera jeden parametr, taki jak „cmd> locate javac.exe”

Przełącznik zlokalizuj / c (jako drugi parametr policzy liczbę wystąpień) i zlokalizuj /? wyświetli tekst pomocy

@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

EDYCJA: (Zaktualizowany skrypt, bardziej zorganizowany i może obsługiwać szerszą gamę sytuacji, takich jak dopuszczenie dowolnego wyszukiwanego hasła, nie tylko nazwy pliku)

@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

źródło
1

Dla przyszłych historyków Windows: zostaliśmy pobłogosławieni Everything Search . Obraz dmenu + find + mlocate zwinięty w ciasną, ładną, małą usługę Windows z opcjami cli. Z wyjątkiem tego, że aktualizuje indeks w czasie rzeczywistym . Nic w Linuksie się nie zbliża. Będzie to jeden z nielicznych razy, kiedy powiesz: „rany, chciałbym, żeby to cholerne jądro było trochę bardziej mikroprocesorem”

Steve Goranson
źródło
Niezła użyteczność. Dzięki za wysłanie.
Rudiger Wolf,
1

Krótka odpowiedź jest taka, że ​​nie ma dokładnego odpowiednika w systemie Windows . Obejściem tego problemu jest użycie polecenia dir . Jest to polecenie listy katalogów, które obsługuje znaki specjalne i może być używane zgodnie ze wskazaną w przyjętej odpowiedzi.

Polecenie Locate w wielu systemach uniksowych jest wyszukiwaniem opartym na indeksie. Działa w połączeniu z poleceniem Updatedb, które indeksuje systemy plików. Ponieważ jest to wyszukiwanie oparte na indeksie, jest zwykle znacznie szybsze niż polecenia tekstowe, takie jak dir i find w systemie Unix, szczególnie przy przeszukiwaniu głębokich hierarchii katalogów.

dww
źródło
wherejest dokładnie równoważny.
Alex78191
-3

Nie znam żadnej metody CLI, aby to zrobić w systemie Windows. Należy pamiętać, że interfejs wiersza polecenia systemu Windows został porzucony przez zwykłych użytkowników, dlatego oferuje ogólnie mniej dojrzały zestaw narzędzi. Najlepszym rozwiązaniem może być użycie GNU findw systemie Windows, który można uzyskać z GnuWin32 . Jeśli tworzysz skrypt, musisz po prostu dołączyć find.exei jego zależności od skryptu (nie martw się, nie jest zbyt duży).

jcrawfordor
źródło