2009-07-25 7 views
0

J'ai donc récemment découvert l'extension (potentiellement) utile% ~ $ PATH: 1, mais il semble que je ne puisse pas la faire fonctionner correctement. J'ai essayé de l'utiliser pour faire une version Windows bon marché de la commande, mais la syntaxe semble me battre. Mon fichier de commandes ressemble à ceci: «ECHO est éteint »

@echo off 
echo %~$PATH:1 

Cependant quand je lance cela avec tout ce que je reçois par exemple

which cmd 

comme sortie, ce qui signifie que selon les documents que la % ~ $ PATH: 1 n'a pas trouvé "cmd". Qu'est-ce que je fais mal?

Répondre

4

La recherche de fichiers avec les extensions .exe, .cmd ou .bat n'est pas suffisante. L'ensemble des extensions applicables est défini dans la variable d'environnement PATHEXT.

Voici ma version d'une qui commande qui honore la variable PATHEXT sur la recherche:

@echo off 
rem Windows equivalent of Unix which command 

setlocal enabledelayedexpansion 

if "%~1"=="" (
    echo Usage: which cmdname 
    exit /b 1 
) 

call :findOnPath "%~1" 
if not errorlevel 1 exit /b 0 
for %%E in (%PATHEXT:;= %) do (
    call :findOnPath "%~1%%E" 
    if not errorlevel 1 exit /b 0 
) 

echo "%~1" not found on PATH. 
exit /b 1 

:findOnPath 
    if not "%~$PATH:1" == "" (
     echo "%~$PATH:1" 
     exit /b 0 
    ) 
    exit /b 1 
+0

Très bon - je stand corrigé. Merci beaucoup. – HerbCSO

0

Shoot! Je l'ai juste compris! J'ai besoin d'utiliser le "cmd.exe" complet en tant que paramètre au lieu de simplement "cmd". D'oh! ;] Ainsi, le script which.cmd complet ressemble à ceci:

@echo off 
call :checkpath %1 
call :checkpath %1.exe 
call :checkpath %1.cmd 
call :checkpath %1.bat 
:checkpath 
if "%~$PATH:1" NEQ "" echo %~$PATH:1 

Yeah! Enfin une quelle commande sur Windows! ;]

0

J'utilise this one pendant un certain temps, il vérifie également les commandes intégrées dans