web-dev-qa-db-fra.com

Unix-type "localiser" sous Windows?

À l'aide de Windows CLI (CMD), comment localiser un fichier qu'il connaît une partie du nom de? Par exemple, chaque station de travail Windows installe Javac dans un emplacement différent, comment le trouvera-t-il à partir de Windows CLI (CMD)?

Googling Je vois que de l'utilisation de l'interface graphique de Windows Explorer (Gestionnaire de fichiers) ou de télécharger une application gratuite. Windows n'a-t-il vraiment pas de commande de localisation intégrée? Les éditions du serveur l'ont-elles? Je fais pas Voulez-vous installer Cygwin ou autre chose, ce ne sont généralement pas mes machines.

17
dotancohen

Vous devriez être capable de faire ce que vous devez faire avec dir:

dir [filename] /s

Remplacez [nom de fichier] avec le nom de fichier que vous recherchez, vous devriez pouvoir utiliser des caractères génériques./s Le fait de rechercher des sous-répertoires de recherche, donc si vous avez besoin que vous puissiez commencer à la racine de C: et que cela vérifie l'ensemble du lecteur.

21
Windos

Personne ne parle de "où" commande? Il recherche un fichier exécutable dans le chemin de l'environnement actuel.

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.
12

Windos a la réponse la plus simple. Mais si vous aimez la ligne de commande, vous voudrez peut-être regarder PowerShell aussi. Pour accomplir le même type de recherche que vous utiliseriez

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

Qui a le bon intérêt de pouvoir être pompé dans une déclaration pratique et exécuter un processus contre les résultats de la recherche.

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

J'ai simplement reçu un localiser le programme pour Windows . Vous avez juste besoin de suivre les instructions Lisez-moi et de copier les fichiers .dll et .exe à System32.

L'alternative comprend l'ajout du chemin du programme sur le chemin de variable d'environnement.

L'idée est d'obtenir localiser Windows si vous recherchez quelque chose de "comme" localiser. :)

3
Cheeku

La question est quelque peu ambiguë.

Vous souhaitez localiser un fichier (indiqué dans le corps de l'OP), mais vous souhaitez également une commande/une application de type locate-type (indiquée dans le titre). Il y a une considération subtile avec d'énormes implications. Vous pouvez localiser avec deux méthodes différentes:

  1. Recherche directement sur la structure de l'arborescence cible dans chaque recherche (lent).

  2. Créez d'abord une base de données de la structure d'arborescence cible (peut être gain de temps), puis de localiser en recherchant la base de données (très rapide). La base de données doit être mise à jour périodiquement pour obtenir de bons résultats dans les recherches. Voir http://fr.wikipedia.org/wiki/locate_%28unix%29 .

Unix locate est de "type 2", mais selon le corps de votre op, vous seriez ok avec l'une des deux méthodes. De plus, vous demandez spécifiquement des options CLI.

Je liste ci-dessous quelques options et je précise s'ils sont CLI/GUI, TYPE 1/2, et j'ajoute quelques commentaires.

  1. http://locate32.cogit.net/ (déjà pointé à l'adresse par John t puis par Cheek ). GUI, type 2. Il y a une version portable. Facilité d'utilisation exceptionnelle et configurabilité. Très similaire à Unix locate (que j'ai utilisé et aimé beaucoup).
    [.____] REMARQUE : Être utilisé pour l'UNIX Updatedb prise assez longtemps pour mettre à jour une base de données (bien sûr, cela dépend de la taille de l'arbre numérisé ), Je trouve locate32 extrêmement rapide. Je ne sais pas comment cela peut être tellement amélioré.

  2. http://sourceforge.net/projects/winlate/ CLI, type 2.

  3. dir [nom de fichier]/s , la solution par Windos . CLI, type 1.

  4. GCI ... , la solution de OldWolf . CLI, type 1.

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

  6. tout GUI, tapez?.

Je sais que celui-ci a été répondu il y a longtemps, mais c'est mon script pour simuler la fonction de localisation utilisée à UNIX/Linux.

Enregistrez ceci comme locate.bat et placez-le dans system32 OR exécuté à partir de répertoire il est stocké. Prend un paramètre comme celui-ci "cmd> localiser javac.exe"

Le commutateur LOCATE/C (en tant que 2ND paramètre comptera le nombre d'instances) et localiser /? affichera le texte d'aide

@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 mis à jour, plus organisé et peut gérer une plus grande variété de situations, telles que permettre à tout terme de recherche non seulement un nom de fichier)

@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
2
user422773

La réponse courte est qu'il ya pas d'équivalent exact sur Windows. La solution de contournement doit utiliser la commande dir. Ceci est une commande de liste de répertoires prenant en charge des caractères spéciaux et peut être utilisée comme indiqué dans la réponse acceptée.

Le localiser La commande sur de nombreux systèmes similaires Unix est une recherche basée sur l'index. Cela fonctionne en tandem avec le updatedateb Commande qui indexe les systèmes de fichiers. Comme il s'agit d'une recherche basée sur l'index, il est généralement beaucoup plus rapide que les commandes de recherche texte telles que dir et Rechercher sur UNIX, surtout lors de la recherche de hiérarchies de répertoires profonds .

1
dww