我有一个exe文件,比如说, C:\ Programs \ tools \ 4.0.97869 \ program.exe
显然,这个版本号可能会有所不同,但我完全相信它始终是4.0.something
我可以从批处理文件中执行一些命令,指定该exe的路径,如下所示:
"C:\Programs\tools\4.0.97869\program.exe" /option:Key somevalue
哪个效果很好。但是,我想在这里放一个通配符,例如:
C:\Programs\tools\4.0.*\program.exe
因为我可以使用cd
Path
program.exe
有一种方法可以指定第一个匹配的目录,其中有一个 必要的文件在一行执行?
感谢。
答案 0 :(得分:1)
以下是使用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]
答案 1 :(得分:1)
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%