Задать вопрос
@byulent

Как получить информацию о файле из подпапки с помощью bat?

Нужно получить время посл. изменения файла из заданной подпапки и сравнить его с временем одноимённого файла в текущей папке. Если файл в текущей папке новее, файл в подпапке заменяется им. Всё это делается в цикле for:

for %%x in (*.txt) do
С текущей папкой всё понятно: %%~tx. А вот как быть с вложенной папкой, я никак не пойму.
Нагуглил про существование модификатора %~$Path:I, а также про отложенное раскрытие переменных с помощью !var!. Всё вроде бы хорошо, но сочетание set time2 = %%~t$dir:x (где $dir - путь к нужной папке) выдаёт мне дату вместе с путём к файлу. А попытка обрезать строку в виде !time2:~0,16! приводит к тому, что...

time2=~0,16!

Что с этим делать?

Полный код:

rem @echo off
setlocal enabledelayedexpansion
for %%x in (*.txt) do (
if not exist %2 md %2
set dir1=%cd%\%2
    if not %%x==%1 (
        if exist %2\%%x (
            set time1 = %%~tx
            set time2 = %%~t$dir1:x
            set time2 = !time2:~0,16!
            set time2
            if time1 GTR time2 copy %%x %2
        ) else copy %%x %2
    )
    rem pause
    if errorlevel 1 echo Ошибка копирования файла
)
  • Вопрос задан
  • 714 просмотров
Подписаться 1 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
Допустим у вас в %%x полный путь к файлу, тогда
%%~dpx - диски и каталог, без имени файла
%%~nxx - имя и расширение файла.
Таким образом, чтоб получить полный имя к такому же файлу в подкаталоге, нужно соорудить такую конструкцию:
%%~dpxSubfolder\%%~nxx
гед Subfolder - имя подкаталога.
Чтоб из этой конструкции получить дату/время, засовываете ее в фор:
for %%y in ("%%~dpxSubfolder\%%~nxx") do echo %%~ty
Можно не в фор, а оформить процедурой, но это уже не принципиально.
Для справки по модификаторам читайте for /?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы