2015-07-10 17 views

回答

3

額外的信息只是爲了完整。

環境變量windir自Windows 95以來存在,並且包含與Windows目錄無關的路徑以及它所在的驅動器的名稱。

對於基於NT的Windows(NT4,Windows 2000,Windows XP,Vista,Windows 7/8/8.1),還有環境變量SystemRoot,其中還包含Windows目錄的路徑,因爲它是父目錄系統目錄

  • System32下
  • Sysnative(僅適用於Windows x64和僅適用於32位應用程序)
  • Syswow64資料(僅限於Windows 64)

有關文件系統重定向詳細閱讀File System Redirector頁微軟的。

它不僅安全,請使用

%windir%\System32\findstr.exe 

%SystemRoot%\System32\findstr.exe 

我會強烈建議使用始終在批處理文件這兩個字符串作爲那麼它不取決於哪些文件夾中的一個在環境變量PATH以及環境變量PATHEXT中的哪些文件擴展名。

有一些不好安裝其在開始,而不是在末端附加和包含在應用程序的文件夾還find.exefindstr.exe這是從Unix portings添加安裝的應用程序到系統環境變量PATH的文件夾路徑,因此工作完全不同於Windows的find.exefindstr.exe。 AVRStudio(或者未經最新版本的AVRStudio驗證)是一個示例,它打破了IT管理員的批處理文件,安裝後並未始終使用Windows命令的完整文件名。

+0

很明顯,當你的PATH變量中有多個目錄,其中包含具有相同名稱但內容不同的文件時,它變得棘手。但是,從某種意義上說,這就是PATH的目的。你必須決定什麼路徑應該優先..在路徑。如果你的Unix路徑中存在危險命名的變量......那麼把它放在Windows路徑之後,在PATH中呢? – tvCa

+0

@tvCa根據重要性排序系統和用戶PATH中的目錄當然沒有問題。 AVRStudio安裝程序的問題是安裝的AVRStudio的'bin'目錄在開始而不是結束時以靜默方式添加到系統PATH。大多數IDE不會將他們的目錄與二進制文件一起添加到系統PATH中,也不會將它們追加到最後。在開始構建時,大多數IDE將編譯器的二進制目錄插入本地PATH副本。對於在構建任務期間執行的批處理文件作爲構建前或構建後步驟,必須經常考慮這一點。 – Mofi

+0

@tvCa看看問題和我的答案在[爲什麼其他文件夾路徑也添加到系統路徑與SetX和不僅指定的文件夾路徑?](http://stackoverflow.com/questions/25915767/) – Mofi

2

而是%windir%\system32\findstr.exe作爲其可能的窗口要在不同的安裝比C:\駕駛。

+0

或者該文件夾也可能不被稱爲「Windows」。 – Hawkmooon

0

恐怕我不明白你的問題的目的,所以我以一種稍微不同的方式來重述它。

如果您在計算機和FINDSTR command運行類型findstr,那麼你可能知道這樣FINDSTR命令的位置是這樣的:

for %%a in (findstr.exe) do echo %%~$PATH:a 

所以,你可以替換下面的表達式:

findstr 

...接下來兩行:

for %%a in (findstr.exe) do set "findstrPath=%~$PATH:a" 
%findstrPath% 

...在一個Windows批處理文件,你會得到完全相同的結果。

所以,問題就出現了:如果在兩種情況下得到相同的結果,爲什麼要使用第二個更復雜的結果呢?

還要注意的是同一點與任何其他外部命令適用於像findxcopyforfiles等爲什麼findstr會在這一點上特別?

正如我之前所說,我不明白你的問題的目的...

+0

我有一個沒有PATH環境變量的操作系統,或者(或%% a)(findstr.exe)做echo %%〜$ PATH:a輸出我%% a在這個時候是意外的 – Brainless

+0

如果沒有設置PATH ...它永遠不會工作。 – tvCa

+0

@tvCa:是的。這就是爲什麼我寫道:「如果你在計算機上鍵入'findstr'並且FINDSTR命令運行...」。如果沒有PATH,那麼輸入'findstr'不會運行FINDSTR,所以@Brainless評論是,humm,err,好吧,無腦評論! – Aacini

相關問題