Windows cmd:从具有动态名称的文件夹运行exe
我有一个exe文件,比如说,C:\Programs\tools\4.0.97869\program.exe 显然,版本号可能会有所不同,但我完全确定它将始终是Windows cmd:从具有动态名称的文件夹运行exe,windows,cmd,Windows,Cmd,我有一个exe文件,比如说,C:\Programs\tools\4.0.97869\program.exe 显然,版本号可能会有所不同,但我完全确定它将始终是4.0 我可以从批处理文件中执行一些命令,指定该exe的路径,如下所示: "C:\Programs\tools\4.0.97869\program.exe" /option:Key somevalue C:\Programs\tools\4.0.*\program.exe 这很好用。但是,我想在这里放置一个通配符,例如: "C:\Pro
4.0
我可以从批处理文件中执行一些命令,指定该exe的路径,如下所示:
"C:\Programs\tools\4.0.97869\program.exe" /option:Key somevalue
C:\Programs\tools\4.0.*\program.exe
这很好用。但是,我想在这里放置一个通配符,例如:
"C:\Programs\tools\4.0.97869\program.exe" /option:Key somevalue
C:\Programs\tools\4.0.*\program.exe
因为我可以使用cd
我不想在Path
我不想cd到那个目录并从那个里调用program.exe
有一种方法可以指定第一个匹配的目录,它具有
需要在一行中执行的文件
谢谢。这里有一个使用PowerShell脚本的解决方案:
$pathPattern = 'C:\Programs\tools\4.0.*\program.exe'
if(!(Test-Path $pathPattern)){
throw "Could not find a single executable"
}
$paths = Get-Item -Path $pathPattern
Invoke-Expression $paths[0]
下面是一个使用PowerShell脚本的解决方案:
$pathPattern = 'C:\Programs\tools\4.0.*\program.exe'
if(!(Test-Path $pathPattern)){
throw "Could not find a single executable"
}
$paths = Get-Item -Path $pathPattern
Invoke-Expression $paths[0]
PowerShell解决方案是一个更好的主意。如果只能使用cmd.exe,则以下操作可能有效。这不是一条单行线。将其存储在.bat文件中并调用它。它通过运行它能找到的第一个“program.exe”来工作。它试图通过将目录搜索排序为最新的第一个来获取最新的
SETLOCAL ENABLEDELAYEDEXPANSION
SET EXITCODE=0
SET "EXEWILD=C:\Programs\tools\4.0.*"
FOR /F %%d IN ("%EXEWILD%") DO (SET "EXEBASE=%%~dpd")
IF NOT EXIST "%EXEWILD%" (
ECHO ERROR: Tool directory "%EXEWILD%" does not exist.
SET EXITCODE=4
GOTO TheEnd
)
FOR /F "usebackq tokens=*" %%d IN (`DIR /B /O-D "%EXEWILD%"`) DO (
IF EXIST "%EXEBASE%\%%~d\program.exe" (
"%EXEBASE%%%~d\program.exe" %*
SET EXITCODE=!ERRORLEVEL!
GOTO TheEnd
) ELSE (
ECHO WARNING: program.exe not found in "%EXEBASE%\%%~d"
)
)
:TheEnd
EXIT /B %EXITCODE%
PowerShell解决方案是一个更好的主意。如果只能使用cmd.exe,则以下操作可能有效。这不是一条单行线。将其存储在.bat文件中并调用它。它通过运行它能找到的第一个“program.exe”来工作。它试图通过将目录搜索排序为最新的第一个来获取最新的
SETLOCAL ENABLEDELAYEDEXPANSION
SET EXITCODE=0
SET "EXEWILD=C:\Programs\tools\4.0.*"
FOR /F %%d IN ("%EXEWILD%") DO (SET "EXEBASE=%%~dpd")
IF NOT EXIST "%EXEWILD%" (
ECHO ERROR: Tool directory "%EXEWILD%" does not exist.
SET EXITCODE=4
GOTO TheEnd
)
FOR /F "usebackq tokens=*" %%d IN (`DIR /B /O-D "%EXEWILD%"`) DO (
IF EXIST "%EXEBASE%\%%~d\program.exe" (
"%EXEBASE%%%~d\program.exe" %*
SET EXITCODE=!ERRORLEVEL!
GOTO TheEnd
) ELSE (
ECHO WARNING: program.exe not found in "%EXEBASE%\%%~d"
)
)
:TheEnd
EXIT /B %EXITCODE%
您是否愿意使用PowerShell?cd C:\prgrams\tools\4.0.*&program.exe
?@Joey是否有任何可能的模拟cd?如果找到多个“4.0.something”目录,该怎么办?@lit首先选择任何目录,不管怎样。小版本和大版本现在并不重要。但事实上,总是有一个文件夹,只是名称不同而已。打开它使用PowerShell?cd C:\prgrams\tools\4.0.*&program.exe
?@Joey是否有任何可能的模拟cd?如果找到多个“4.0.something”目录,该怎么办?@lit首先选择任何目录,不管怎样。小版本和大版本现在并不重要。但事实上,总是有一个文件夹,只是名称不同,可以考虑!虽然不是一行。@TEHEMPRAH保存脚本,但调用脚本的时间为1行;)由于某些原因,PS在该系统上不是一个选项。D:无论如何,在对其使用Get Item
之前,最好先测试路径-Path'C:\Programs\tools\4.0.*\program.exe'
。@lit同意。固定的,可以考虑!虽然不是一行。@TEHEMPRAH保存脚本,但调用脚本的时间为1行;)由于某些原因,PS在该系统上不是一个选项。D:无论如何,在对其使用Get Item
之前,最好先测试路径-Path'C:\Programs\tools\4.0.*\program.exe'。@lit同意。固定的。