2017-08-30 52 views
1

我創建了一個批處理文件,該文件轉到一系列應用程序目錄,並在其中註冊所有dll和ocx文件。如果我打開提升的命令提示符並切換到特定的目錄並手動輸入regsvr命令,則它工作正常。該批處理文件看起來像試圖註冊每個文件,但它們不會被註冊。我試過右鍵點擊它,並告訴它以管理員身份運行(命令窗口不在標題欄中顯示「管理員」),但它沒有註冊。如果我打開一個提升的命令窗口並嘗試從那裏運行批處理文件,它也不起作用。從批處理文件運行regsvr32不起作用

我也嘗試把腳本文件放在c:\ Windows \ System32和C:\ Windows \ SysWOW64中,但沒有任何工作。

我也讀過,該文件需要是ANSI而不是Unicode,但這也沒有幫助。

是否有某種命令,我可以把regsvr,這將強制每一個被提升的行?我不想讓用戶手動輸入所有命令。

這裏是我的批處理文件:

chdir c:\program files (x86)\pfps 
for /r %%i in (*.dll) do regsvr32 /s %%i 
chdir DataManager 
for /r %%i in (*.dll) do regsvr32 /s %%i 
chdir ..\falcon 
for /r %%i in (*.dll) do regsvr32 /s %%i 
for /r %%i in (*.ocx) do regsvr32 /s %%i 
chdir FVOverlays 
for /r %%i in (*.dll) do regsvr32 /s %%i 
chdir ..\..\FVImageryService 
for /r %%i in (*.dll) do regsvr32 /s %%i 
chdir ..\GarminGPSFeed 
for /r %%i in (*.dll) do regsvr32 /s %%i 
chdir ..\MapDataServer 
for /r %%i in (*.dll) do regsvr32 /s %%i 
chdir ..\SkyViewNG 
for /r %%i in (*.dll) do regsvr32 /s %%i 
for /r %%i in (*.ocx) do regsvr32 /s %%i 
chdir ..\System 
for /r %%i in (*.dll) do regsvr32 /s %%i 
for /r %%i in (*.ocx) do regsvr32 /s %%i 
+0

嘗試引號:'for/r %%我在(* .dll)中做regsvr32/s「%% i」'。 –

+0

這就是訣竅!這些引用使得它起作用了什麼? – jdixon

+0

用雙引號括起來的路徑被視爲單路徑,即使它包含空格。 – user2956477

回答

2

的問題是在您的路徑空間:c:\program files (x86)\pfpsregsvr32命令將分隔空間並將其作爲多個參數進行讀取。

爲了讓您有空格使用引號:

for /r %%i in (*.dll) do regsvr32 /s "%%i" 

導致例如爲:

regsvr32 "c:\program files (x86)\pfps\blahblah.dll" 

其中文件路徑作爲一個參數處理的regsvr32


爲什麼:chdir c:\program files (x86)\pfps使用空格且不帶引號?

它解釋here on ss64 about cd/chdir

如果Command Extensions啓用[默認] CD命令如下增強:

[...]

CD不把空格作爲分隔符,所以可以將CD放入包含空格的子文件夾名稱中,而不用引號括住名稱。

例如:
CD \我的文件夾

是一樣的:
CD 「\我的文件夾」

[...]

CHDIR是CD

的代名詞

但我建議總是使用引號路徑。

+0

這很有道理。謝謝! – jdixon