Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Найти наибольшее значение файла (http://forum.oszone.net/showthread.php?t=342329)

crazydog 25-09-2019 21:25 2889585

Найти наибольшее значение файла
 
Доброго времени суток.
Ситуация такая - в папке с программой находится несколько 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 2889593

Попробуйте так:
Скрытый текст
Код:

@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 2889594

Силами 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 2889640

Powershell:
Код:

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


Время: 10:05.

Время: 10:05.
© OSzone.net 2001-