Приведенный ниже пакетный файл можно использовать для получения полного имени каталога версии в родительском каталоге каталога пакетного файла, содержащего подкаталог subdir
, причем второе число является наибольшим числом всех каталогов версий с подкаталогом subdir
до тех пор, пока второе число в строке версии никогда не содержит один или несколько ведущих нулей.
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "PreviousVersion=-1"
set "VersionDirectory="
for /D %%I in ("%~dp0..\dir-v0.*.0") do if exist "%%I\subdir\" (
for /F "tokens=2 delims=." %%J in ("%%~nxI") do (
set "CurrentVersion=%%J"
setlocal EnableDelayedExpansion
if !CurrentVersion! GTR !PreviousVersion! (
endlocal
set "VersionDirectory=%%I"
set "PreviousVersion=%%J"
) else endlocal
)
)
if defined VersionDirectory (
echo Directory with greatest version number containing subdir is:
echo/
echo "%VersionDirectory%"
) else (
echo Could not find any version directory with subdir.
)
echo/
pause
endlocal
Пакетный файл может работать быстрее, если гарантируется, что путь к каталогам версий никогда не содержит один или несколько восклицательные знаки.
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "PreviousVersion=-1"
set "VersionDirectory="
for /D %%I in ("%~dp0..\dir-v0.*.0") do if exist "%%I\subdir\" (
for /F "tokens=2 delims=." %%J in ("%%~nxI") do (
if %%J GTR !PreviousVersion! (
set "VersionDirectory=%%I"
set "PreviousVersion=%%J"
)
)
)
if defined VersionDirectory (
echo Directory with greatest version number containing subdir is:
echo/
echo !VersionDirectory!
) else (
echo Could not find any version directory with subdir.
)
echo/
pause
endlocal
Отложенное расширение включено для всего пакетного файла в этом случае.
Примечание: Команда FOR с параметром /D
игнорирует каталоги с установленным скрытым атрибутом.
Удалите %~dp0
и измените set "VersionDirectory=%%I"
на set "VersionDirectory=%%~fI"
, если используемый пакетный файл должен запускаться в родительском каталоге текущего каталога независимо от хранилища. расположение командного файла.
Условие if exist "%%I\subdir\"
можно удалить, если не имеет значения, вер В каталоге sion уже есть подкаталог subdir
или нет.
Следующий код может использоваться для получения имени файла без пути к самому новому файлу в подкаталоге subdir
каталога версий с наибольшим номером версии:
set "NewestFile="
for /F "eol=| delims=" %%K in ('dir "%VersionDirectory%" /A-D /B /O-D /TW 2^>nul') do set "NewestFile=%%K" & goto HaveNewestFile
:HaveNewestFile
if not defined NewestFile (
echo Failed to find a file in directory: "%VersionDirectory%"
) else (
echo Newest file in "%VersionDirectory%" is: "%NewestFile%"
)
Чтобы понять используемые команды и то, как они работают, откройте окно командной строки *1034*, выполните там следующие команды и полностью прочитайте все страницы справки, отображаемые для каждой команды.
call /?
... объясняет %~dp0
... диск и путь аргумента 0, который является путем к каталогу пакетного файла, всегда заканчивающимся обратным слэсом sh. dir /?
echo /?
endlocal /?
for /?
if /?
pause /?
set /?
setlocal /?