如何使用批处理文件查找可执行文件的目录

时间:2016-10-09 05:28:51

标签: batch-file

我只是想开始说我在批处理文件中有点像菜鸟。应用程序Steam是一个数字分发平台。我试图制作一个修改蒸汽游戏的批处理文件。我已经弄清楚如何修改游戏,但应用程序' steam'可以安装在任何驱动器上的任何目录中。我知道在任务管理器中,您可以右键单击某个进程并单击打开文件位置,然后它会将您带到应用程序所在的位置。我想知道是否有人知道如何在批处理文件中执行此操作,然后将其包含在%filelocation%\ content \ content

之类的目录中

4 个答案:

答案 0 :(得分:1)

假设steam可执行文件名为steam.exe,并假设可执行文件位于系统PATH环境变量的目录中,那么您可以使用where命令获取文件的位置。

where steam.exe

现在您需要将该命令的输出变为变量。

for /f "tokens=*" %a in ('where steam.exe') do set filelocation=%a

现在,由于BATCH中的许多怪癖之一,上面的for命令将在命令窗口中按原样运行,但需要稍微修改才能在BATCH文件中工作。

for /f "tokens=*" %%a in ('where steam.exe') do set filelocation=%%a

请注意,字母%

前面有两个a个字符

如果steam.exe不在系统的PATH变量上,那么您需要在注册表中查询Steam的安装目录。为此,您需要使用reg命令并在HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall下的某处查询

P.S。抱歉,由于我目前没有Windows机器,我现在无法给你更完整的答案

答案 1 :(得分:0)

如果您特别关注Steam,则无法依赖它在用户路径中,并且您可能不想在整个驱动器中搜索它。 (无论如何,您可能会发现错误的可执行文件。)

您最好不要在注册表中查询他们的Steam安装。

@echo off
rem this is quick and dirty
reg query HKCU\Software\Valve\Steam /v SteamExe>nul
if errorlevel 1 echo Steam not found for current user & goto :eof
for /f "delims=" %%a in ('reg query HKCU\Software\Valve\Steam /v SteamExe') do set steampath=%%a
steampath=%steampath:~26%
echo %steampath%

答案 2 :(得分:0)

适用于32和64版本的Windows。

@echo off
(for /f "usebackq tokens=1,2,*" %%a in (`reg query "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Steam" /v UninstallString`) do set SteamPath32=%%c)>nul 2>&1
(for /f "usebackq tokens=1,2,*" %%a in (`reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam" /v UninstallString`) do set SteamPath64=%%c)>nul 2>&1
set SteamPath=%SteamPath64%%SteamPath32%
set SteamPath=%SteamPath:\uninstall.exe=%
echo %SteamPath%
pause>nul

答案 3 :(得分:0)

应该可以在用户注册表中的特定位置找到可执行文件和路径:

@Echo Off
Set "SExe="
Set "SPth="
For /F "Tokens=1,2*" %%A In ('Reg Query HKCU\SOFTWARE\Valve\Steam') Do (
    If "%%A" Equ "SteamExe" Set "SExe=%%C"
    If "%%A" Equ "SteamPath" Set "SPth=%%C")
If Not Defined SExe Exit/B
Rem Your commands go under here for example
Echo=The full path to the Steam executable is "%SExe%"
If Defined SPth Echo=The Steam folder path is "%SPth%"
Timeout -1 1>Nul