﻿# Windows 要如何快速找到特定執行檔的所在目錄 ( which )

在 Linux 底下要找到執行檔所在路徑真的非常容易，只要輸入 [which](http://ss64.com/bash/which.html) 指令就能找到了，不過在 Windows 底下卻異常的困難 (其實是不知道)，所以都常在想說如果 Windows 的命令提示字元下也有 which 指令那該有多好，最近找到好幾套工具都覺得不適用又有 Bugs，但最後找到了一段非常非常精簡的 Batch 批次檔，可以用來幫忙查出執行檔所在位置，而且這段批次檔僅僅只有 90 個字元就達成任務。

為了能讓搜尋指令檔所在位置的使用體驗與 Linux 一致，我決定將這個批次檔擺在 system32 目錄下，好讓我可以在任意目錄執行 which 指令，以下是設定的步驟：

1\. 先在 **C:\\Windows\\System32** 目錄下建立一個空的檔案，並取名為 **which.cmd**

    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/c5c47e8367bb13ab8db5-image_312.png)

2\. 用 Notepad 開啟這個檔案，並輸入以下這一行。沒錯！只有一行，而且是很難看懂的一行！ ( [參考](https://web.archive.org/web/20130513235627/http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true "Using batch parameters") )

```
@for %%e in (%PATHEXT%) do @for %%i in (%1%%e) do @if NOT "%%~$PATH:i"=="" echo %%~$PATH:i
```

3\. 設定完成後我們立即來驗證程式是否生效，以下是指令執行的圖示，是不是非常好用呢！^\_^

    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/4bef0eb884540afd3900-SNAGHTMLd3b3299.png)

不過我因為寫這篇文章讓我意外的發現另一個 Windows 內建的 [where.exe](http://technet.microsoft.com/zh-tw/library/cc755838\(WS.10\).aspx) 命令工具 ( 請看上面第一張圖示紅框處往上第 2 個檔案 )，這才讓我驚覺原來 Windows 早在 Windows Server 2003 之後的作業系統就內建這個命令了 ( 註: 在 Windows XP 以前還沒內建 )，但為什麼沒見人提起過呢？我在想應該是這個工具先天上 [SEO](http://zh.wikipedia.org/zh-tw/搜尋引擎最佳化) 就注定失敗的，你想想看你在 Google 搜尋 “where” 真的可以找到你要的東西嗎？ XD

這個 **where** 命令就比上面利用的批次檔強大多了，基本上這個工具就是用來搜尋任何檔案用的，預設可以用來查找執行檔，但你要找任何其他類型的檔案、特定目錄下的檔案也都可以，甚至可以用萬用字元來搜尋檔案，非常非常的實用阿！以下我們來看看幾個經典的用法：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/9efd5aa0f320932cb700-SNAGHTMLd4bafc4.png)

依照上圖編號說明如下：

1.  預設的情況下如果搜尋一段文字時，會去 PATH 環境變數所定義的路徑去找執行檔出來
2.  同上，執行的結果與用 which.cmd 如出一轍
3.  你可以輸入萬用字元搜尋特定檔名的檔案，預設一樣會搜尋所有 PATH 環境變數所定義的路徑
4.  由於我有將 c:\\Windows\\System32\\inetsrv 加入到我的 PATH 環境變數，所以才查的到 appcmd
5.  透過 /R 可以指定目錄搜尋，這樣就不會受限於 PATH 環境變數所定義的路徑，可搜尋任意檔案！

詳細的 where 命令工具說明可用 **where /?** 查詢用法。

**相關連結**

-   [A 90-byte "whereis" program](https://devblogs.microsoft.com/oldnewthing/20050120-00/?p=36653/)
-   [Using batch parameters](https://web.archive.org/web/20130513235627/http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true) ( 請看 **%~$PATH:1** 這個 Modifier )
-   [Where 命令與參數選項說明](http://technet.microsoft.com/zh-tw/library/cc755838\(WS.10\).aspx)
-   [Windows XP - Command-line reference A-Z](http://technet.microsoft.com/en-us/library/bb490890.aspx)
-   [Windows Server 2003 - Command-line reference](http://technet.microsoft.com/en-us/library/cc785423\(WS.10\).aspx)

-   [New ways to do familiar command-line tasks](http://technet.microsoft.com/en-us/library/cc787686\(WS.10\).aspx)
-   !!! [New command-line tools](http://technet.microsoft.com/en-us/library/cc738152\(WS.10\).aspx)
-   [Command-line reference A-Z](http://technet.microsoft.com/en-us/library/cc778084\(WS.10\).aspx)
-   [Command shell overview](http://technet.microsoft.com/en-us/library/cc737438\(WS.10\).aspx)
-   [Configure the command prompt](http://technet.microsoft.com/en-us/library/cc737937\(WS.10\).aspx)

-   [Windows Server 2008 - Command-line Reference](http://technet.microsoft.com/en-us/library/cc754340\(WS.10\).aspx)
-   [List of DOS commands - Wikipedia, the free encyclopedia](http://en.wikipedia.org/wiki/List_of_DOS_commands)
-   [MS-DOS命令列表 - 維基百科，自由的百科全書](http://zh.wikipedia.org/zh-tw/MS-DOS%E5%91%BD%E4%BB%A4%E5%88%97%E8%A1%A8)
-   [Batch files - for DOS, OS/2, Windows 95/98, NT 4, 2000 and XP](http://www.robvanderwoude.com/batchfiles.php)
