PDA

Показать полную графическую версию : [решено] Найти наибольшее значение файла


crazydog
25-09-2019, 21:25
Доброго времени суток.
Ситуация такая - в папке с программой находится несколько exe файлов stxxxxxx.exe (xxxxxx - числовое значение, например 123456, 234567)
Задача - необходимо удалить все неактуальные версии файлов (самое большое число - актуальный файл).
Например:
st111111.exe - удалить старый файл
st121456.exe - оставить

Пока написал код, но из него можно только получить имена файлов.

setlocal ENABLEDELAYEDEXPANSION
for %%i in (*.exe) do (
set FILENAME=%%i
set NUMBER=!FILENAME:~-10,-4!
echo !NUMBER!
)

Iska
25-09-2019, 22:18
Попробуйте так:
@echo off
setlocal enableextensions enabledelayedexpansion

set sMask=st[0-9][0-9][0-9][0-9][0-9][0-9]\.exe

for /f "usebackq skip=1 delims=" %%i in (
`2^>nul dir /b /a:-d /o:-n "st*.exe" ^| findstr.exe /i /r /c:"%sMask%"`
) do echo del /f /q "%%~i"

endlocal
exit /b 0

Для реального удаления уберите echo. Рассчитано строго на шесть цифр в номере.

greg zakharov
25-09-2019, 22:21
Силами cmd (st*******.exe файлы находятся в папке с командным сценарием):
@echo off
setlocal enabledelayedexpansion
for /f %%i in ('dir /b st*.exe') do (
set "x=%%~ni"
if not defined n (
set "n=!x:st=!"
) else (
set "x=!x:st=!"
if !n! lss !x! set "n=!x!"
)
)
for /f %%i in (
'dir /b st*.exe ^| findstr /vrc:"st!n!.exe"'
) do del /f/q %%i
endlocal
exit /b
Силами pwsh:
(ls st*.exe | sort {[Int32]($_.BaseName -replace 'st')} -Descending)[1..-1].ForEach{ri $_}

DJ Mogarych
26-09-2019, 09:47
Powershell:

dir st*.exe |sort name |select -SkipLast 1 |Remove-Item -Force -Confirm:$false




© OSzone.net 2001-2012