Est-ce que quelqu'un sait comment déterminer l'emplacement d'un fichier se trouvant dans l'un des dossiers spécifiés par la variable d'environnement PATH autre que de faire un répertoire filename.exe/s à partir du dossier racine? Je sais que cela étire les limites d'une question de programmation, mais cela est utile pour les problèmes de déploiement, aussi j'ai besoin d'examiner les dépendances d'un exécutable. :-)Localisation d'un fichier sur le chemin
Répondre
Vous pouvez utiliser l'utilitaire where.exe
dans le répertoire C:\Windows\System32
.
Sur les fenêtres, je dirais que l'utilisation %WINDIR%\system32\where.exe
titre Votre question ne précise pas les fenêtres, donc j'imagine que certaines personnes pourraient trouver cette question à la recherche de la même chose avec un système d'exploitation POSIX sur leur esprit (comme moi).
Cet extrait de php peut les aider:
<?php
function Find($file)
{
foreach(explode(':', $_ENV('PATH')) as $dir)
{
$command = sprintf('find -L %s -name "%s" -print', $dir, $file);
$output = array();
$result = -1;
exec($command, $output, $result);
if (count($output) == 1)
{
return($output[ 0 ]);
}
}
return null;
}
?>
C'est le code de production légèrement modifié je cours sur plusieurs serveurs. (Par exemple hors contexte OO et a laissé quelques assainissement et la vérification des erreurs pour la brièveté.)
juste pour le plaisir, voici un powershell one-liner mise en œuvre
function PSwhere($file) { $env:Path.Split(";") | ? { test-path $_\$file* } }
Cela ne marche pas, puisque les chemins dans 'PATH' peuvent aussi contenir'; '(et sont alors cités). – Joey
Je ne m'en suis pas rendu compte. Bon point –
En plus du « qui » (MS Windows) et 'where' (unix/linux), j'ai écrit mon propre utilitaire que j'appelle 'findinpath'. En plus de trouver l'exécutable qui serait exécuté, s'il est transmis à l'interpréteur de ligne de commande (CLI), il trouvera toutes les correspondances, renvoyé path-search-order afin que vous puissiez trouver des problèmes d'ordre de chemin. De plus, mon utilitaire renvoie non seulement des exécutables, mais n'importe quelle correspondance de spécification de fichier, pour capturer ces moments où un fichier désiré n'est pas réellement exécutable. J'ai également ajouté une fonctionnalité qui s'est avérée très utile; l'indicateur -s lui indique de rechercher non seulement le chemin du système, mais tout sur le disque système, répertoires utilisateur connus exclus. J'ai trouvé que cette fonction soit incroyablement utile dans les tâches d'administration des systèmes ...
est ici la sortie « usage »:
usage: findinpath [ -p <path> | -path <path> ] | [ -s | -system ] <file>
or findinpath [ -h | -help ]
where: <file> may be any file spec, including wild cards
-h or -help returns this text
-p or -path uses the specified path instead of the PATH environment variable.
-s or -system searches the system disk, skipping /d /l/ /nfs and /users
L'écriture d'un tel utilitaire est pas difficile et je vais le laisser comme un exercice pour le lecteur. Ou, si demandé ici, je posterai mon script - c'est dans 'bash'.
Si vous souhaitez rechercher le fichier au niveau de l'API, vous pouvez utiliser PathFindOnPath. Il a l'avantage supplémentaire de pouvoir spécifier des répertoires supplémentaires, au cas où vous voudriez rechercher dans des emplacements supplémentaires en dehors du système ou du chemin utilisateur actuel.
Pour les systèmes Windows NT:
for %i in (file) do @echo %~dp$PATH:i
Remplacer file
avec le nom du fichier que vous recherchez.
+1 l'un des rares endroits où les moteurs de recherche ont trouvé une solution qui fonctionne sans aucun outil tiers. Merci! –
vous pouvez remplacer $ PATH par n'importe quel $ environmentVariable et également rechercher des fichiers non-binaires. Juste ce dont j'avais besoin! –
Utilisez 'pour% e dans (% PATHEXT%) do @ (pour% x dans (fichier% e) faites @if pas"% ~ $ PATH: x "==" "@ echo.% ~ $ CHEMIN: x) 'si vous ne connaissez pas l'extension. – Joey
Utilisation de PowerShell sous Windows ...
Function Get-ENVPathFolders {
#.Synopsis Split $env:Path into an array
#.Notes
# - Handle 1) folders ending in a backslash 2) double-quoted folders 3) folders with semicolons 4) folders with spaces 5) double-semicolons i.e. blanks
# - Example path: 'C:\WINDOWS\;"C:\Path with semicolon; in the middle";"E:\Path with semicolon at the end;";;C:\Program Files;
# - 2018/01/30 by [email protected] - Created
$NewPath = @()
$env:Path.ToString().TrimEnd(';') -split '(?=["])' | ForEach-Object { #remove a trailing semicolon from the path then split it into an array using a double-quote as the delimeter keeping the delimeter
If ($_ -eq '";') { # throw away a blank line
} ElseIf ($_.ToString().StartsWith('";')) { # if line starts with "; remove the "; and any trailing backslash
$NewPath += ($_.ToString().TrimStart('";')).TrimEnd('\')
} ElseIf ($_.ToString().StartsWith('"')) { # if line starts with " remove the " and any trailing backslash
$NewPath += ($_.ToString().TrimStart('"')).TrimEnd('\') #$_ + '"'
} Else { # split by semicolon and remove any trailing backslash
$_.ToString().Split(';') | ForEach-Object { If ($_.Length -gt 0) { $NewPath += $_.TrimEnd('\') } }
}
}
Return $NewPath
}
$myFile = 'desktop.ini'
Get-ENVPathFolders | ForEach-Object { If (Test-Path -Path $_\$myFile) { Write-Output "Found [$_\$myFile]" } }
J'ai aussi blogué la réponse avec quelques détails sur au http://blogs.catapultsystems.com/chsimmons/archive/2018/01/30/parse-envpath-with-powershell
- 1. Localisation en utilisant le fichier msi
- 2. Localisation basé sur le profil de l'utilisateur
- 3. Enregistrer le fichier enregistré sur l'ipod Chemin de la bibliothèque
- 4. application basée sur la localisation
- 5. obtenir le chemin du fichier txt
- 6. Obtenir le chemin du fichier via javascript
- 7. CString extrait le chemin du fichier
- 8. NSIS obtenir le chemin du fichier appelant
- 9. Localisation, MUI et le CLR
- 10. Si le chemin d'un fichier a de l'espace entre l'uri ne peut pas récupérer le fichier dans le chemin
- 11. DOS Script pour prendre le nom de fichier et le chemin dyanmically basé sur la date
- 12. localisation asp.net: rapports sur les traductions manquantes
- 13. Comment obtenez-vous le chemin du fichier pour le fichier lorsque le répertoire de l'utilisateur change?
- 14. Contrôle de chemin de fichier
- 15. Localisation avec SharpDevelop
- 16. tortue svn erreur Afficher journal pour le fichier - Chemin introuvable
- 17. Déterminer le chemin du fichier de la base de données
- 18. conserve le chemin du fichier de contrôle du téléchargement de fichier dans le contrôle!
- 19. Localisation dans ASP.NET MVC
- 20. Comment soumettre le chemin d'accès et le nom de fichier d'un fichier sans soumettre le fichier lui-même dans ASP.NET?
- 21. C# comment spécifier le chemin du fichier appData dans le fichier app.config
- 22. Localisation de ASP.NET MVC
- 23. localisation clientside
- 24. Le chemin du fichier est-il une URL?
- 25. Rechercher le chemin d'accès au fichier en cours d'exécution
- 26. Javascript - obtenir le chemin du fichier a chuté dans HTA
- 27. Spécification du chemin d'accès Java pour le fichier de propriétés
- 28. Comment accéder au fichier avec le chemin UNC d'asp.net
- 29. Vim: comment convertir le nom de fichier en chemin?
- 30. Création d'un fichier que le chemin n'existe pas?
Merci - court mais doux, je savais qu'il y avait un outil simple ligne de commande pour elle ...! – ljs
Pour quel système d'exploitation? Je ne peux pas trouver "where.exe" n'importe où sur mon système Windows XP. –
WHERE.EXE est livré avec Windows XP Server 2003 et versions ultérieures ainsi que les kits de ressources Windows depuis Win2K. Il est également inclus avec VS2005, mais pas 2008 (C: \ Program Files \ Microsoft Visual Studio 8 \ Common7 \ Outils \ Bin \ Where.Exe). – raven