Как получить имя первой (последней измененной) папки по заданному пути в командном файле
Как получить первое (последнее измененное) имя папки из \\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
после первого назначения, как произошло.