Ketik "temukan" pada Windows?


17

Menggunakan Windows CLI (cmd), bagaimana cara menemukan file yang ia tahu bagian dari nama? Sebagai contoh, setiap workstation Windows menginstal javac di lokasi yang berbeda, bagaimana orang menemukannya dari Windows CLI (cmd)?

Googling Saya melihat menyebutkan hanya menggunakan Windows Explorer (file manager) GUI atau mengunduh beberapa aplikasi freeware. Apakah Windows benar-benar tidak memiliki perintah loc built-in? Apakah edisi server memilikinya? Saya tidak ingin menginstal cygwin atau apa pun, ini biasanya bukan mesin saya.


3
Tidak ada built-in ke baris perintah Windows yang benar-benar mirip dengan mencari. Saya akan merekomendasikan loc32 ( loc32.net )
John T

javacbiasanya harus di tempat yang sama ...
Tamara Wijsman

1
@ JohnTr bahwa lokasi tidak lagi berfungsi - rumah loct32 yang diperbarui adalah loc32.cogit.net
TrojanName

1
Coba Git-Bash.exe alias MINGW yang mencakup locatedan updatedb--per stackoverflow.com/questions/36841241/…
MarkHu

Jawaban:


23

Anda harus dapat melakukan apa yang perlu Anda lakukan dengan dir:

dir [filename] /s

Ganti [nama file] dengan nama file yang Anda cari, Anda harus dapat menggunakan wildcard. / s membuatnya mencari sub-direktori jadi jika Anda perlu, Anda dapat mulai di root C: dan minta itu memeriksa seluruh drive.


Jika Anda mencari di seluruh drive untuk nama file yang umum, mungkin juga membayar untuk menyertakan / p karena hanya menampilkan halaman hasil pada satu waktu.
Windos

Terima kasih, ini terlihat sempurna. Saya sering tahu setidaknya bahwa saya perlu mencari di C: \ WINDOWS sehingga ini dapat mempersempit waktu yang dibutuhkan pencarian.
dotancohen

1
Saya tidak berpikir itu javacdiinstal ke C:\WINDOWS...
Tamara Wijsman

Tidak berfungsi dengan banyak drive / partisi. Dan bahkan pada tahun 2011, saya memiliki lebih dari sekedar C: Lokasi Linux tidak peduli dengan sistem file.
Jürgen A. Erhard

1
@ JürgenA.Erhard bersikap adil ... Linux sendiri tidak terlalu peduli dengan 'sistem file' seperti yang disajikan Windows (menurut pemahaman saya terbatas.) Saat ini jika Anda ingin mencari lebih dari satu drive, PowerShell akan menjadi pilihan saya meskipun, karena Anda dapat mengelompokkan semua volume Anda dan menembakkan Get-ChildItem pada mereka semua.
Windos

11

Tidak ada yang berbicara tentang perintah "di mana"? itu mencari file yang dapat dieksekusi di PATH lingkungan saat ini.

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.

4

Windos memiliki jawaban paling langsung. Tetapi jika Anda menyukai baris perintah, Anda mungkin ingin melihat PowerShell juga. Untuk menyelesaikan jenis pencarian yang sama dengan yang Anda gunakan

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

Yang memiliki manfaat sampingan yang bagus karena dapat dipompa ke pernyataan foreach yang praktis dan menjalankan proses terhadap hasil pencarian.

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..]
    }

3
Ini terasa terlalu lama untuk diketik.
Tamara Wijsman

2
Get-ChildItem dapat disingkat menjadi gciatau ls.
digitxp

Untungnya, tidak seperti di cmd, di PowerShellAnda dapat menggunakan "Tab" untuk melihat saran, seperti di Linux. Jadi sebenarnya tidak banyak yang bisa diketik. Dan, dalam kasus saya, lsdi PowerShell tidak berfungsi.
WesternGun

3

Saya hanya punya program cari untuk Windows . Anda hanya perlu mengikuti petunjuk baca saya dan salin file .dll dan .exe ke system32.

Alternatif termasuk menambahkan jalur program ke variabel lingkungan PATH.

Idenya adalah untuk mendapatkan lokasi di Windows jika Anda mencari sesuatu "seperti" lokasi. :)


Terima kasih Cheeku, itu terlihat seperti aplikasi yang berguna. Namun saya memang menyebutkan bahwa saya tidak dapat menginstal aplikasi pada sistem karena mereka biasanya bukan sistem saya.
dotancohen

2
Ya, tetapi saya tetap menjawab karena orang lain seperti saya dapat menemukannya berguna dan orang lain tidak akan bingung karena pos ini sudah memiliki jawaban yang diterima!
Cheeku

1
locateada di komputer Win7 saya. Keluhan tentang database menjadi 435 hari, ketika intallasi tidak lebih dari 3 bulan. Dan updatedbtidak termasuk.
vinnief

@vinnief Itu masalah khusus dengan instalasi Anda, saya kira.
Cheeku

1
@Cheeku - ini adalah aplikasi yang sama menunjuk oleh John T . Ini bukan CLI seperti yang diminta OP, tapi itu mengagumkan.
sancho.s Reinstate Monica

2

Pertanyaannya agak ambigu.

Anda ingin mencari file (dinyatakan dalam OP), tetapi Anda juga menginginkan perintah / aplikasi "temukan-tipe" (dinyatakan dalam judul). Ada satu pertimbangan halus dengan implikasi besar. Anda dapat menemukan dengan dua metode berbeda:

  1. Mencari struktur pohon target langsung di setiap pencarian (lambat).

  2. Pertama-tama membuat basis data struktur pohon target (mungkin memakan waktu), dan kemudian mencari dengan mencari basis data (sangat cepat). Basis data harus diperbarui secara berkala untuk mendapatkan hasil yang baik dalam pencarian. Lihat http://en.wikipedia.org/wiki/Locate_%28Unix%29 .

Unix locateadalah "tipe 2", tetapi sesuai tubuh OP Anda, Anda akan baik-baik saja dengan salah satu dari dua metode. Selain itu, Anda bertanya secara khusus tentang opsi CLI.

Saya mencantumkan beberapa opsi di bawah ini, dan saya menentukan apakah itu CLI / GUI, tipe 1/2, dan saya menambahkan beberapa komentar.

  1. http://locate32.cogit.net/ (sudah ditunjukkan oleh John T dan kemudian oleh Cheeku ). GUI, tipe 2. Ada versi portabel. Kemudahan penggunaan, dan konfigurabilitas yang luar biasa. Sangat mirip dengan Unix locate(yang sering saya gunakan dan sukai).
    Catatan : Menjadi terbiasa dengan Unix yang Updatedbmembutuhkan waktu cukup lama untuk memperbarui database (tentu saja, itu tergantung pada ukuran pohon yang dipindai), saya menemukan locate32 sangat cepat. Saya tidak tahu bagaimana itu bisa sangat ditingkatkan.

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

  3. dir [nama file] / s , solusi oleh Windos . CLI, tipe 1.

  4. gci ... , solusi oleh OldWolf . CLI, tipe 1.

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

  6. Semuanya GUI, ketik?


1
Terima kasih, ini adalah penjelasan yang bagus dan ringkasan opsi yang bagus.
dotancohen


2

Tidak perlu menginstal dengan tangan. Lihat http://chocolatey.org

choco install winlocate

Mulai ulang lingkungan shell

Updatedb.bat -a
Locate.bat somefile

1
winlocate tidak (lagi) menggunakan Chocolatey.
Lennart

2

Saya tahu ini sudah dijawab lama, namun ini skrip saya untuk mensimulasikan fungsi loc yang digunakan di unix / linux

Simpan ini sebagai loc.bat dan letakkan di System32 ATAU jalankan dari direktori tempat penyimpanannya. Mengambil satu parameter seperti ini "cmd> cari javac.exe"

Switch temukan / c (sebagai parameter ke-2 akan menghitung jumlah instance) dan cari /? akan menampilkan teks bantuan

@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: (Script Diperbarui, lebih terorganisir dan dapat menangani berbagai situasi yang lebih luas, seperti memungkinkan istilah pencarian apa pun bukan hanya nama file)

@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

1

Untuk ruang masa depan sejarawan Windows: kami telah diberkati dengan Pencarian Segalanya . Gambar dmenu + find + mlocate digulung menjadi, layanan Windows sedikit ketat dengan opsi cli. Kecuali hal ini memperbarui indeksnya secara real time . Tidak ada di Linux yang dekat. Ini akan menjadi salah satu dari beberapa kali Anda akan mengatakan "Wah saya berharap kernel sialan ini sedikit lebih Microsofty"


Utilitas yang bagus. Terima kasih sudah memposting.
Rudiger Wolf

1

Jawaban singkatnya adalah tidak ada padanan yang pasti pada Windows . Solusinya adalah dengan menggunakan perintah dir . Ini adalah perintah daftar direktori yang mendukung karakter khusus, dan dapat digunakan sebagaimana ditunjukkan dalam jawaban yang diterima.

The Cari perintah pada banyak Unix seperti sistem adalah pencarian berdasarkan indeks. Ini bekerja bersama-sama dengan perintah Updatedb yang mengindeks sistem file. Karena ini adalah pencarian berbasis indeks, biasanya jauh lebih cepat daripada perintah pencarian berbasis teks seperti dir dan temukan di Unix, terutama ketika mencari hierarki direktori yang dalam.


wheresama persis.
Alex78191

-3

Saya tidak mengetahui adanya metode CLI untuk melakukan ini di Windows. Perlu diingat bahwa Windows CLI telah ditinggalkan oleh pengguna biasa, sehingga menawarkan seperangkat alat yang umumnya kurang matang. Taruhan terbaik Anda mungkin menggunakan gnu finddi Windows, yang bisa Anda dapatkan dari GnuWin32 . Jika Anda mengembangkan skrip, Anda hanya perlu memasukkan find.exedan ketergantungannya pada skrip (jangan khawatir, itu tidak terlalu besar).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.