从batch file运行regsvr32不起作用

我创build了一个batch file,进入一系列应用程序目录,并在其中注册所有的dll和ocx文件。 如果我打开提升的命令提示符,并切换到特定的目录,并手动inputregsvr命令,它工作正常。 该batch file看起来像试图注册每个文件,但他们没有得到注册。 我已经试过右键点击它,并告诉它以pipe理员身份运行(命令窗口不显示标题栏中的“pipe理员”),但它不会注册。 如果我打开一个提升的命令窗口并尝试从那里运行batch file,它也不起作用。

我也尝试把脚本文件放在c:\ Windows \ System32和C:\ Windows \ SysWOW64中,没有任何工作。

我也读了,该文件需要是ANSI而不是Unicode,但这也没有帮助。

有什么命令我可以放在与regsvr,这将迫使每一个被提升? 我不想让用户手动input所有命令。

这是我的batch file:

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 

问题是你的路径中的空格: 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使用空格而没有引号?

这里解释了关于cd/chdir ss64 :

如果启用命令扩展 [默认],CD命令增强如下:

[…]

CD不会将空格视为分隔符,因此可以将CD放入包含空格的子文件夹名称中,而不用引号包围名称。

例如:
cd \我的文件夹

是相同的:
cd“\我的文件夹”

[…]

CHDIR是CD的同义词

但我建议总是使用引号的路径。