2009-03-21 8 views
2

Je souhaite extraire un chemin d'accès complet à partir de la variable d'environnement PATH avec des outils cmd natifs. Considérez le contenu PATH suivant:Comment puis-je extraire un chemin complet à partir de la variable d'environnement PATH?

C: \ Program Files \ Kits de ressources Windows \ Tools \; C: \ Perl \ emplacement \ bin; C: \ Perl \ bin; C: \ WI ndows \ system32; C: \ WINDOWS; C: \ WINDOWS \ System32 \ Wbem; c: \ Program Files \ Microsoft SQ L Server \ 90 \ Tools \ Binn \; C: \ WINDOWS \ system32 \ WindowsPowerShell \ v1.0; C: \ Program Fi les \ Microsoft SQL Server \ 80 \ Tools \ Binn \; C: \ Program Files \ Microsoft SQL Server \ 10 0 \ DTS \ Binn \; C: \ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn \ c: \ program fil es \ nmap \; C: \ Program Files \ WinRAR \; C: \ Program Files \ QuickTime \ QTSystem \; C: \ progra m Files \ hydra-5,4-win \; C: \ Fichiers programme \ john1701 \ run; C: \ dig ;; C: \ cygwin; C: \ wamp \ b dans \ mysql \ mysql5.0.45 \ bin; C: \ Program Files \ MySQL \ MySQL Server 5.0 \ bin; C: \ Program Files \ Tail4Win; C: \ Program Files \ Overlook Fing 1.1 \ bin

Je veux extraire uniquement le chemin suivant:

C: \ Program Files \ MySQL \ MySQL 5.0 \ bin;

Est-ce que FOR est capable d'une telle chose?

Répondre

4

Vous pouvez utiliser for pour symboliser à ; mais vous devez vous occuper des chemins qui ont un ; (et donc avoir besoin de guillemets). Dans l'ensemble, je dirais que vous construisez une solution assez fragile avec beaucoup de code à ce stade.

Si vous voulez savoir où un certain exécutable est, puis

for %%i in ("mysql.exe") do @echo.%%~$PATH:i 

vous dira que (ou non, si elle est nulle part dans le PATH).

MISE À JOUR: Ok, je l'ai. Un petit fichier batch méchant suit:

@echo off 
setlocal enabledelayedexpansion enableextensions 
set p=%PATH% 
:loop 
for %%i in ("notepad.exe") do call :setvar "%%~$p:i" 
if not :%x%:==:: (call :clearpath & goto loop) 
goto :eof 

:setvar 
    set x=%~1 
goto :eof 

:clearpath 
    echo %x% 
    for %%x in ("!x!") do set d=%%~dpx 
    set d=!d:~,-1! 
    set p=!p:%d%=! 
goto :eof 

Ce imprimera tous les chemins correspondant de PATHnotepad.exe a été trouvé (le premier programme que je sais sur le dessus de la tête pour être à deux endroits ici). Adaptez-vous en conséquence pour votre problème. Supprime simplement le chemin trouvé de la variable, puis nous essayons à nouveau de faire correspondre, jusqu'à ce qu'il ne reste aucune correspondance.

Cela dit, cela est encore très joli non.

+0

Merci Votre indice est très utile –

+0

% ~ $ PATH: Je recherche les répertoires répertoriés dans la variable d'environnement PATH et développe% I à la Si le nom de variable d'environnement n'est pas défini ou si le fichier n'est pas trouvé par la recherche, alors ce modificateur se transforme en chaîne vide s'il le faut. get –

+0

Je sais ce que les docs en disent. Quelle est exactement votre question? – Joey

1

Si vous connaissez déjà le chemin, pourquoi avez-vous besoin de le trouver dans la chaîne de PATH?

Ou pour le dire d'une autre manière, connaissez-vous une façon de reconnaître cette chaîne, étant donné qu'elle peut varier entre les installations?

+0

je veux le rendre portable autant que possible parce que je vais l'appliquer sur plusieurs serveurs et je pense que chaque installation a mysql bain à l'intérieur% PATH% –

+0

Oui, mais lorsque l'utilisateur installe MySQL, sont-ils autorisés à choisir un chemin d'installation? Si oui, comment saurez-vous quelle partie de la variable PATH est le chemin d'installation de MySQL? –

+0

Je ne suis pas sûr à ce sujet mais je suppose que mysql sont dans% PATH% –

1

Vous pouvez également utiliser vbscript.

Set objFS=CreateObject("Scripting.FileSystemObject") 
Set objArgs = WScript.Arguments 
strSearch = objArgs(0) 
Set WshShell = WScript.CreateObject("WScript.Shell") 
Set WshPath = WshShell.Environment("SYSTEM") 
strPath =WshPath("Path") 

s = Split(strPath,";") 
For i=LBound(s) To UBound(s) 
    If InStr(1,s(i),strSearch,1) > 0 Then 
     WScript.Echo s(i) 
    End If 
Next  

enregistrez le chemin de recherche ci-dessus.vbs et l'utiliser comme celui-ci sur la ligne de commande pour trouver une chaîne que vous voulez dans la variable PATH:

c: \ test> cscript // nologo findpath.vbs mysql

Dans un fichier batch, pour obtenir le résultats, utilisez une boucle pour