2017-08-30 56 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