通过批处理运行文件的最新版本

时间:2019-10-10 15:38:46

标签: powershell shell batch-file cmd

我正在尝试找到最简单的方法来调用要运行的文件夹中的最新文件版本。

例如,C:\users\user\Desktop\filestest包含4个文件:

program-A.0011.exe
program-A.0012.exe
program-A.0013.exe
program-A.0014.exe

0014是最新版本,但可能不是最后修改的文件。

cd C:\users\user\Desktop\filestest && program-A.%v%.exe,其中%v%是最高变量?我在这里想念什么?

请记住,文件没有特定的排序顺序,我只是在寻找一种调用最新版本的方法。在这种情况下0014

Test .exe files here

2 个答案:

答案 0 :(得分:0)

如果文件名总是被格式化,以使“最新”出现在最后,您可以使用FOR循环来查找它。这未经测试。

SET "THEDIR=%USERPROFILE%\Desktop\filestest"
FOR /F "delims=" %%A IN ('DIR /B /O:N "%THEDIR%\program-A.*.exe"') DO (SET "LATEST=%%~a")
ECHO The latest file is "%THEDIR%\%LATEST%"

如果您想继续使用PowerShell,可以:

$Latest = (Get-ChildItem -File -Path $Env:USERPROFILE\Desktop\filestest -Filter 'program-A.*.exe' |
    Select-Object -Last 1).FullName

答案 1 :(得分:0)

把这个弄清楚了。 如果命名结构发生更改,这很容易中断,但它确实满足了我目前需要做的事情。 感谢大家的投入。

cd "%USERPROFILE%\Desktop\filetest"
setlocal enableDelayedExpansion
set max=0
for /f "tokens=1* delims=-.0" %%A in ('dir /b /a-d program-A.*.exe') do if %%B gtr !max! set max=%%B
echo higest version: program-%max%

pause