2009-07-25 71 views
0

所以我最近偶然發現了(可能)有用的%〜$ PATH:1擴展,但是我似乎無法使它正常工作。我試圖用它來製作一個廉價的Windows版本的哪個命令,但是這個語法似乎在擊敗我。我的批處理文件看起來像這樣:「ECHO處於關閉狀態」

@echo off 
echo %~$PATH:1 

然而,當我跑這跟例如

which cmd 

我得到的輸出,根據文檔,這意味着%〜$ PATH:1沒有找到「cmd」。我究竟做錯了什麼?

回答

4

檢查擴展名爲.exe,.cmd或.bat的文件是不夠的。這組適用的擴展在環境變量PATHEXT中定義。

這裏是我的版本的該命令是榮譽在搜索PATHEXT變量:我一直在使用this one一會兒

@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

非常好 - 我立場糾正。非常感謝。 – HerbCSO 2009-07-25 16:32:41

0

拍!我只是想通了!我需要使用完整的「cmd.exe」作爲參數,而不是「cmd」。 D'哦! ]因此,完整的which.cmd腳本是這樣的:

@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 

呀!最後是Windows上的哪個命令! ;]

0

,它也內置了檢查命令