Как написать .bat для сканирования измененных файлов и что в етих измененных файлов подставлялась дата?
Суть, нужен батник для сканирования определенного пути на измененные папки и файлы внутри них, смотреть на дату изменения, если дата = текущей дате подставляется текущая дата, например: был файлик тест.тхт, я его открыл чего то добавил и изменил, сохранил, запускаю батник - он видит что файл был изменен и добавляет дату 210831 тест.тхт
Чуть подробнее:
в батнике прописываем путь где сканировать, например C:\temp
в этом каталоге есть папки и файлы, любые с любыми названиями
- нужно что бы батник сканировал изминенные СЕГОДНЯ (текущая дата) файлы, смотрел на имя файла, если файл имеет имя тест.xlsx то переименовывал на 210831 тест.xlsx (текущей датой), если есть файл с именем 210826 тест2.xlsx, то менял первые 6 символов на текущую дату изменения, если маски в виде 210826 нет вообще в имени файла то переименовывал в текущую дату изменения
в батнике прописываем путь где сканировать, например C:\temp
в этом каталоге есть папки и файлы, любые с любыми названиями
- нужно что бы батник сканировал изминенные СЕГОДНЯ (текущая дата) файлы, смотрел на имя файла, если файл имеет имя тест.xlsx то переименовывал на 210831 тест.xlsx (текущей датой), если есть файл с именем 210826 тест2.xlsx, то менял первые 6 символов на текущую дату изменения, если маски в виде 210826 нет вообще в имени файла то переименовывал в текущую дату изменения
Отслеживать изменения в файлах можно с помощью аттрибута "архивный".
Этот аттрибут выставляется автоматически ОС при любом изменении файла.
Вывести список файлов, у которых аттрибут "архивный" выставлен можно с помощью dir /a:a
Получить дату/время изменения файла можно с помощью модификаторов переменной цикла. Смотрите for /?
После переименования файла нужно снимать аттрибут архивный - это будет признак того, что файл уже обработан и в следующий раз он в обработку не попадет (если не будет модифицирован). Сделать это можно командой attrib /?
@echo off
SetLocal EnableDelayedExpansion
set "workdir=c:\script\temp"
for /f "tokens=* delims=" %%a in ('dir /a:a /b "%workdir%" 2^>nul') do (
for /f "tokens=* delims=" %%b in ("%workdir%\%%a") do set "d=%%~tb"
set "d1=!d:~8,2!!d:~3,2!!d:~0,2!"
echo %workdir%\%%a !d1!
ren "%workdir%\%%a" "!d1!-%%a"
attrib -A "%workdir%\!d1!-%%a"
)
Как-то так. Проверяй.
В переменной workdir задай обрабатываемый каталог с файлами.
res2001, впринципе все работает, но только нужно добавить условие
1) если файл содержит вначале "21**** имя.xlsx" - удалять первые 6 символов и заменять на текущую дату
а так все огонь, он переименовывает датой когда последняя дата изменения файла была, если ты открываешь документ - чего то меняешь и сохраняешь и запускаешь батник он переименовывает вот так: - 210901 210831 test.txt - т.е. вчерашнюю дату не изменяет и не удаляет а добавляет новую
ovrtke, А если не 21, а 20?
Ну ты это, давай уже сам напрягись немного. Вчера меня разжалобил твой вопль о помощи, так то обычно тут задания не выполняют.
Как выделить подстроку описано тут: set /?
В коде есть пример этой операции, сделай по аналогии и запихни в if.
Для обращения к переменным внутри for или if используй восклицательные знаки, а не проценты. Как в моем примере.