cmd:从具有动态名称的文件夹中运行exe

时间:2017-11-10 14:27:04

标签: windows cmd

我有一个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

完美地导航
  1. 我不想在Path
  2. 中指定该exe
  3. 我不想cd到该目录并从那里调用program.exe
  4.   

    有一种方法可以指定第一个匹配的目录,其中有一个   必要的文件在一行执行?

    感谢。

2 个答案:

答案 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%