Определить шаблон по имени файла, используя пакет

589
hailbreno

У меня есть скрипт, который переименовывает файлы, добавляя метку времени в качестве префикса к текущему имени файла. Файл с отметкой времени выглядит так:

20170407_1030.file1.txt 

Я запускаю этот скрипт в папке после работы с некоторыми файлами. Проблема в том, что как только у файла уже есть временная метка, добавленная к его имени, в следующий раз, когда я запускаю скрипт, он добавляет другую временную метку к имени файла. Вместо этого, если файл уже имеет временную метку в своем имени, я хочу заменить ее обновленной временной меткой.

Для этого я пытаюсь определить имена файлов, которые уже содержат временную метку, и, если это так, заменить ее обновленной временной меткой.

Мой скрипт для этого сейчас выглядит так:

setlocal enabledelayedexpansion  for /f "delims=|" %%F in ('dir /b %cd%\*.*') do ( set "MDate=%%~tF" set "Patern=*_*." set "TimeStamp=!MDate:~6,4!!MDate:~0,2!!MDate:~3,2!" ren "%%~nF%%~xF" "!TimeStamp!-%%~nF%%~xF"  ) exit 

Изменить: извините, что не предоставил дополнительную информацию. Я провел некоторое исследование и не могу найти способ сопоставить маски в данном образце. Я знаю, как заменить предопределенные шаблоны или как подобрать маски ren *.png *.jpg.

1
Спасибо, что сказали нам, что вы хотите сделать. У вас есть вопрос? И если ваш вопрос, как, пожалуйста, покажите нам, что вы попробовали в первую очередь! :) Это поможет, поэтому мы не предоставляем ответы, которые вы уже пытались. Если вы ничего не предприняли, будьте готовы к отрицательному голосованию! Тем не менее, базовый журнал * может * быть числом периодов. Если нет, то ваш вопрос неясен, так как вы не предоставляете достаточно подробностей. В любом случае, пока вы [не отредактируете свой вопрос] (https://superuser.com/posts/1225592/edit), я проголосовал за закрытие. сожалею Dave 6 лет назад 2
Кроме того, SuperUser не является сайтом типа «Пожалуйста, напишите мне сценарий». Поделитесь своими исследованиями, и мы поможем вам выяснить, почему вещи не работают так, как они. LPChip 6 лет назад 1
Добавлена ​​дополнительная информация. hailbreno 6 лет назад 0
Ваш "вопрос" все еще ясен как грязь, даже после редактирования. Я не знаю, как интерпретировать * «Я хочу определить имена файлов, которые уже содержат метку времени, а затем обновить ее». * dbenham 6 лет назад 0
Извините, пожалуйста, посмотрите, достаточно ли это ясно сейчас :) hailbreno 6 лет назад 0

1 ответ на вопрос

2
LotPings
@Echo off Pushd "X:\path\to\workdir"  :: Get current date time  For /f "delims=." %%A in ( 'wmic os get LocalDateTime^|findstr ^^[0-9]' ) do Set DT=%%A Set "DT=%DT:~0,8%_%DT:~8,4%"  For /f "tokens=1* delims=." %%A in ( 'Dir /B/A-D "20*_*.*.txt"^|findstr "^20[0-9][0-9][01][0-9][0-3][0-9]_[0-2][0-9][0-5][0-9]\." ' ) do Echo ren "%%A.%%B" "%DT%.%%B" 

Если вывод выглядит нормально, удалите эхо в последней строке.

Образец вывода:

> SU_1225592.cmd ren "20170704_1656.File1.txt" "20170704_1700.File1.txt" ren "20170704_1656.File2.txt" "20170704_1700.File2.txt" 

Редактировать Чтобы просто проверить файл на наличие шаблона date_time,
вы можете использовать этот пакет, который использует только уровень ошибки, возвращаемый из findstr,
для условного выполнения при успешном выполнении &&или сбое ||различных команд.

@Echo off Set "Pattern=^20[0-9][0-9][01][0-9][0-3][0-9]_[0-2][0-9][0-5][0-9]\." For %%A in ("%CD%\*") Do Echo:%%~nA|findstr "%Pattern%">NUL 2>&1 && ( Echo found Pattern in %%~fA ) || ( Echo No Pattern in %%~fA ) 

Образец вывода:

No Pattern in A:\Copy+Archive.cmd No Pattern in A:\SU_1225592.cmd found Pattern in A:\20170704_1656.File1.txt found Pattern in A:\20170704_1656.File2.txt No Pattern in A:\tp010387.BAT 
Хотя это не тот ответ, который я искал, он привел меня прямо к решению. Благодарю. hailbreno 6 лет назад 0