【问题标题】:Running regsvr32 from a batch file isn't working从批处理文件运行 regsvr32 不起作用
【发布时间】:2017-08-30 11:49:26
【问题描述】:

我创建了一个批处理文件,该文件转到一系列应用程序目录并在其中注册所有 dll 和 ocx 文件。如果我打开提升的命令提示符并更改到特定目录并手动键入 regsvr 命令,它可以正常工作。批处理文件看起来像是在尝试注册每个文件,但它们没有被注册。我尝试右键单击它并告诉它以管理员身份运行(命令窗口在标题栏中未显示“管理员”),但它没有注册。如果我打开提升的命令窗口并尝试从那里运行批处理文件,它也不起作用。

我也尝试将脚本文件放在 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

【问题讨论】:

  • 尝试引用:for /r %%i in (*.dll) do regsvr32 /s "%%i".
  • 这就是诀窍!引号的作用是什么?
  • 用双引号括起来的路径被威胁为单路径,即使它包含空格。

标签: windows batch-file regsvr32


【解决方案1】:

问题在于路径中的空格: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 的同义词

但我建议始终为路径使用引号。

【讨论】:

  • 这很有意义。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-01
  • 2012-12-18
  • 2011-10-29
  • 2012-08-07
  • 2011-02-07
相关资源
最近更新 更多