茫茫網海中的冷日 - 對這文章發表回應
茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1671507 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
Fireball_0013.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

對這文章發表回應

發表限制: 非會員 可以發表

發表者: 冷日 發表時間: 2017/1/21 14:24:10
冷日為了某個 BAT(免安裝 exe 下使用的)可以被順利執行,花了一點時間去找『如何在 Windows 中直接執行 BAT 不會找不到路徑』!
看到了一篇在 PTT 的文章,討論的是「取得目前所在資料夾位置」,他清楚說明了『%~dp0』、『%~d0』、『%~p0』、『%cd%』的差別!
特別轉過來做個紀錄,也希望其他有需要的人可以順利!

start.bat
==========================================================================
@echo off
@IF EXIST "%ProgramFiles%\WowUSBVirusKiller" (
  set PATH="%ProgramFiles%\WowUSBVirusKiller"
  start WowUSBSecurity.exe -c KillVirus.exe && start WowUSBAutoUpdate.exe
) ELSE IF EXIST "%ProgramFiles(x86)%\WowUSBVirusKiller" (
  set PATH="%ProgramFiles(x86)%\WowUSBVirusKiller"
  start WowUSBSecurity.exe -c KillVirus.exe && start WowUSBAutoUpdate.exe
) ELSE (
  set CD="%~dp0"   *新增這行後解決。
  start WowUSBSecurity.exe -c KillVirus.exe && start WowUSBAutoUpdate.exe
)
=========================================================================

%~dp0 批次檔所在路徑,例如 C:\Program Files\Mozilla Firefox\ 或 UNC 路徑,例如 \\Server\Share\Program Files\Mozilla Firefox\
%~d0 批次檔所在磁碟代號,例如 C: 或 UNC 路徑的雙反斜線 \\
%~p0 批次檔所在路徑,不含磁碟代號,例如 \Program Files\Mozilla Firefox\ 或開頭不帶雙反斜線的 UNC 路徑,例如 Server\Share\Program Files\Mozilla Firefox\
%cd% 目前工作路徑,非根路徑時後面不帶反斜線,例如 C:\Program Files\Mozilla Firefox

寫個批次檔測試一下比較容易瞭解 %~dp0 與 %cd% 的差別
@ECHO OFF
ECHO %%~dp0 = %~dp0
ECHO %%cd%% = %cd%
PAUSE


當批次檔與目前工作路徑都在 C:\Program Files\Mozilla Firefox\ 時,執行 批次檔結果如下
%~dp0 = C:\Program Files\Mozilla Firefox\
%cd% = C:\Program Files\Mozilla Firefox
請按任意鍵繼續 . . .


若批次檔所在路徑不變,目前工作路徑在 U:\USB\ 時,執行批次檔結果如下
%~dp0 = C:\Program Files\Mozilla Firefox\
%cd% = U:\USB
請按任意鍵繼續 . . .


若在批次檔中使用 SET 命令將 cd 指定為環境變數,則 %cd% 會被取代,不過 這不表示目前工作路徑被改變,所以 SET CD="%~dp0" 這樣寫應該會有問題說
假設批次檔與執行檔放在一起,以下有三種方法提供參考
1. 如同原文裡的範例,修改 PATH 環境變數
SET PATH=%~dp0
start Program.exe


2. 切換目前工作路徑
%~d0 cd %~dp0
start Program.exe


3. 以完整路徑方式執行
start "" "%~dp0Program.exe"


原文出處:Re: [批次] 取得目前所在資料夾位置? - 看板 EzHotKey - 批踢踢實業坊
內容圖示
url email imgsrc image code quote
樣本
bold italic underline linethrough   












 [詳情...]
validation picture

注意事項:
預覽不需輸入認證碼,僅真正發送文章時才會檢查驗證碼。
認證碼有效期10分鐘,若輸入資料超過10分鐘,請您備份內容後,重新整理本頁並貼回您的內容,再輸入驗證碼送出。

選項

Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|