【问题标题】:Get InstallDir from regedit - CMD/Batch file从 regedit 获取 InstallDir - CMD/批处理文件
【发布时间】:2017-09-27 13:03:28
【问题描述】:

这是我的批处理代码:

@echo off
title Program
cd C:\Program Files (x86)\Company\Program
start xxxx.exe
exit

我的问题是......如果我不知道程序安装在哪里,我如何找到这部分:C:\Program Files (x86)\Company\Program 和批处理文件?我需要从 regedit 中的 InstallDir 获取安装路径。有可能吗?

我需要这样做:

@echo off
title Program
*here get program path from InstallDir in regedit*
start xxxx.exe
exit

-

Regedit 路径:Software\Company\Program - 这里我得到 InstallDir REG_SZ 值和程序路径(C:\Program Files (x86)\Company\Program)。 p>

【问题讨论】:

  • 提供实际的注册表根、键、值名称和数据会有所帮助,它们不能是“敏感信息”!要获取注册表信息,您可能需要在 For 循环中使用 Reg Query
  • 请提供实际的注册表根,可能是HKEY_LOCAL_MACHINEHKEY_CURRENT_USER,以及密钥,不是真的Software\Company\Program 吗?我>
  • 这还不清楚。据我所知,您需要知道应用程序名称,然后在注册表中进行搜索以匹配该应用程序,然后从那里提取路径以执行。对吗?
  • 我已经把你的问题放回原样了。请不要删除您的问题内容并将其替换为答案,(有答案工具)。此外,您报告的工作脚本不可能工作,但我使用 Start 命令替换 Echo 不工作。如果你能证明我是不正确的,我会很乐意承认,但是接受我的回答并为你们两个更改最后一行是不正确的行为。

标签: windows batch-file registry


【解决方案1】:

试试这个,在第 3 行更改 Company\Program 之后

@Echo Off
For /F "Skip=1 Tokens=2*" %%A In (
    'Reg Query "HKLM\SOFTWARE\Company\Program"^
    /V "InstallDir" 2^>Nul'
) Do Set "EP=%%~B"

Echo %%EP%%=%EP%&Pause

您的路径将保存在变量%EP% 中,为了演示目的,我在最后一行中有Echo'd。您可能需要将该行替换为:

Start "" /D "%EP%" "executable.ext"

或者

Start "" "%EP%\executable.ext"

编辑

如果您尝试卸载注册表项,它可能会更适合您。举个例子:

@Echo Off
For /F "Skip=1 Tokens=2*" %%A In (
    'Reg Query "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\U‌​ninstall\Company\Program"^
    /V "UninstallString" 2^>Nul'
) Do Start "" "%%~B"

【讨论】:

  • 是的!然而,我认为他正试图通过在注册表中搜索并找到路径来确定路径。所以也许像reg query HKLM\SOFTWARE /f ApplicationPath /s 这样的东西然后循环遍历变量以在每个路径中找到Adobe.exe 的匹配项并将该路径设置为执行变量......虽然可能是错误的。 :) 如果他确实想手动设置,那么还不如手动通过 regedit 并设置每个路径,除非它仅适用于特定应用程序。
  • 不,你有权利。这就是我想做的。找到应用程序的路径并运行它。
  • @DamianSilent 这太傻了.. 为什么不这样做。 for %%i in (xxxx.exe) do @echo. %%~$PATH:i
  • 我只需要用注册表来做这个。 @compo @Echo Off For /F "Skip=1 Tokens=2*" %%A In ( 'Reg Query "HKLM\SOFTWARE\Company\Program"^ /V "InstallDir" 2^>Nul' ) Do Set "EP=%%~B" Start "xxxx.exe" "%EP%"此代码打开文件夹,其中包含 xxxx.exe 我做错了什么?
  • "start "%EP%\xxxx.exe"" 打开另一个标题为 xxxx.exe 的 cmd 文件。
【解决方案2】:

好的。我创建了这个:

@echo off
:CheckOS
IF EXIST "%PROGRAMFILES(X86)%" (GOTO 64BIT) ELSE (GOTO 32BIT)

:64BIT
FOR /F "Skip=2 tokens=2*" %%A IN (
   'REG QUERY "HKLM\Software\Wow6432Node\Electronic Arts\NFSMW" /v InstallDir'
) DO (set cdNFSMW=%%B)

GOTO END

:32BIT
FOR /F "Skip=2 tokens=2*" %%A IN (
   'REG QUERY "HKLM\Software\Electronic Arts\NFSMW" /v InstallDir'
) DO (set cdNFSMW=%%B)

GOTO END

:END

chdir /d %cdNFSMW%
start unins000.txt
exit

而且效果很好。但是,不知道哪种方式更好更准确?

这个:

@echo OFF

reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x86" > NUL && set OS=32BIT || set OS=64BIT

if %OS%==32BIT echo This is a 32bit operating system
if %OS%==64BIT echo This is a 64bit operating system

或者这个:

:CheckOS
IF EXIST "%PROGRAMFILES(X86)%" (GOTO 64BIT) ELSE (GOTO 32BIT)

:64BIT
echo 64-bit...
GOTO END

:32BIT
echo 32-bit...
GOTO END

:END

你怎么看?哦...还有一件事 - "skip=2" 的值是多少?

重要吗?写的好吗?

【讨论】:

  • 上述两种方式的工作方式大致相同,这在很大程度上取决于您要批量创建多少行。但是,我会说您应该在 64 位和 32 位机器以及您拥有的不同 Windows 版本上进行测试。
  • 我检查了一台 32 位笔记本电脑,它工作正常。在 PC x64 上 - 相同。但我在某处读到 Windows 2000 没有 reg.exe 模块,并且可能在该系统上运行此脚本时遇到问题。这是真的吗?
  • 是的。但它可以下载.. 这里真正的大问题是,你为什么还在使用 Windows 2000 机器? :)
  • 因为游戏支持Windows 2000。找个想卸载游戏的人,又不能卸载。毕竟,他/她怎么知道系统没有reg.exe呢? :D
  • 除了reg.exe还有其他方法
猜你喜欢
  • 2012-03-11
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多