2011/10/14

批次檔 bat 以系統管理員身份執行路徑遺失的解決辦法

Win7 下經常需要管理員身份執行,
但是如果這樣原來 %cd% 可以取到的路徑變成了 system(32) 的...
這樣就蛋疼了!

尤其是 bat 基本上都是為了操作目前目錄的嘛...
發現解決方法如下,在頭部加入如下代碼:
[bash]%~d0
Cd %~dp0[/bash]

如果你是 Windows 7,以系統管理員身分執行就知道了!
Vista 也是,反正不管哪個目錄,
管理員執行路徑都會變成系統的目錄
主要是一些綠色軟體註冊服務什麼很蛋疼....

很多程式是批處理寫的...
但是需要權限..於是就蛋疼了,
Vista/Win7 就有這個問題,
直接執行很多時候權限不夠,開管理員權限路徑又悲劇...
權限改了以上這個地方,管理員身份執行也就搞定了。

按:http://www.nanhubbs.com/bbs/thread-267581-1-1.html

 
DOS 批處理中 %cd% 和 %~dp0 的異同

在 DOS 的批處理中,有時候需要知道當前的路徑,
在 DOS 中,有兩個環境變量可以跟當前路徑有關,
一個是 %cd%,一個是 %~dp0,
這兩個變量的用法和代表的內容一般是不同的。

1. %cd% 可以用在批處理檔案中,也可以用在命令列中,
展開後,是磁碟機代號+當前目錄路徑,

%cd% 的內容是可以被改變的,
比如 CD 命令就可以改變它的內容。

如:在 C:\dir 下,
[bash]echo %cd%[/bash]
顯示為 C:\dir,
cd 切換到 qoo,
再 echo 則顯示為 C:\dir\qoo。

2. %~dp0 只可以用在批處理檔案中,
它是由它所在的批處理檔案的目錄位置決定的,

是批處理檔案所在的磁碟機代號+路徑,

在執行這個批處理檔案的過程中,
它展開後的內容是不可以改變的。

比如在 D:\ 下有個批處理檔案 dirshow.bat,
內容如下:
[bash]@echo off
echo this %%cd%% is %cd%
echo this %%~dp0 is %~dp0[/bash]

在 C:\ 下執行它,輸出為:
[bash]C:\>D:\dirshow.bat
this %cd% is C:\
this %~dp0 is D:\[/bash]

按:http://luck-donkey.iteye.com/blog/360342

 
%0 代表批處理本身,例 D:\program\abc\Custom.bat
~dp 是變量擴充
d 既是擴充到磁碟機代號 D:\
p 就是擴充到當前路徑 program\abc
dp 就是擴充到磁碟機代號+當前路徑 D:\program\abc

按:http://www.cnblogs.com/smwikipedia/archive/2009/03/30/1424749.html

 
以 D:\program\abc\Custom.bat 為例:
%~d0 為指定批次檔所在的磁碟代號下,
Cd %~dp0 為切換到批次檔所在的路徑位置,

以系統管理員身分執行則為:
[bash]C:\Windows\system32>D:
D:\>Cd program\abc\
D:\program\abc>... [/bash]
返回到當前目錄執行批次檔,
則不會有遺失路徑的問題發生 :)

沒有留言:

張貼留言