Как получить имя первой (последней измененной) папки по заданному пути в командном файле

Как получить первое (последнее измененное) имя папки из \\demo\Test\test1\?
Если первая папка test-new_20170908.2 Как я могу получить test-new_20170908.2 и только 20170908.2 часть?

Это то, что я сделал до сих пор:

@echo off
set MYDIR=\\demo\Test\test1\
set MYDIR1=%MYDIR:~0,-1%
for %%f in (%MYDIR1%) do set myfolder=%%~nxf
echo %myfolder% > folderPath.txt

Этот код дает мне test1 но я хочу самое первое имя папки внутри данного пути, и это не работает согласно моей спецификации.
Кто-нибудь может мне помочь?

2 ответа

Решение

Следующий скрипт отсортирует все каталоги (/a:d) под demo\Test\test1 по дате последней записи (/o:-d /tw) и просто сохраните второй токен имени, разделенного _: name_date который date,

Пакетный скрипт:

@echo off

set "MYDIR=demo\Test\test1"

rem sort directories by date (last write)
for /f "tokens=*" %%f in ('dir "%MYDIR%" /a:d /o:-d /tw /b') do (
   rem use second token after _ in name
   for /f "tokens=2 delims=_" %%a in ('echo %%f') do ( set "myfolder=%%a" )
   goto :found
)

:found

echo %myfolder%

Выход:

20170908.2

Ссылки на команды от ss64.com:

@ECHO OFF
SETLOCAL
set MYDIR=\\demo\Test\test1\
set MYDIR1=%MYDIR:~0,-1%
SET "mydir=U:\sourcedir\"
FOR /d %%a IN ("%mydir%\*") DO SET "myfolder=%%~nxa"&GOTO found
:found
echo %myfolder%

GOTO :EOF

Я перевесил настройку mydir в каталог, который более удобен в моей системе.

Ищите все каталоги (for /d) соответствие поставляемой маске (\ здесь не имеет значения, включаете ли вы терминал \ в значении mydir (я предпочитаю опустить этот терминал \) затем обработайте возвращенное имя каталога как имя файла и выберите имя и расширение, используя for операторы разделения имен; присвоить результат переменной и принудительно выйти из for с goto после первого назначения, как произошло.

Другие вопросы по тегам