Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Поиск и переименование файлов с помощью BATника

Ответить
Настройки темы
CMD/BAT - Поиск и переименование файлов с помощью BATника

Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


Помогите написать!
Нужен батник, который бы сканировал определенный путь (который пропишем) на изминенные СЕГОДНЯ (текущая дата) файлы, смотрел на имя файла, и на дату изменения, если файл имеет имя тест.xlsx и изменен сегодняшней датой, то переименовывал на 210831 тест.xlsx (текущей датой), если есть файл с именем 210826 тест2.xlsx, который менялся 5 дней назад, и сегодня повторно изменился, то менял первые 6 символов на текущую дату изменения, если маски в виде 210826 нет вообще в имени файла то переименовывал в текущую дату изменения. Как я вижу, +-

@echo off
set thePATH=C:\temp
for /F "tokens=1-4 usebackq delims=. " %%1 in (`date /t`) do set mydate=%4%%3%%2%%1
ren test.xlsx %mydate%test.xlsx

Еще думаю нужно копать сюда -
Отслеживать изменения в файлах можно с помощью аттрибута "архивный".
Этот аттрибут выставляется автоматически ОС при любом изменении файла.
Вывести список файлов, у которых аттрибут "архивный" с помощью dir /a:a
Получить дату/время изменения файла можно с помощью модификаторов переменной цикла. Возможно for /
После переименования файла нужно снимать аттрибут архивный - это будет признак того, что файл уже обработан и в следующий раз он в обработку не попадет (если не будет модифицирован). Сделать это можно командой возможно attrib /?

Помогите дописать))

Отправлено: 15:36, 31-08-2021

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


1. А зачем все эти переименования файлов, если дату изменения файла легко вывести и так, и произвести необходимые манипуляции? Какая конечная цель этого переименования?
2. Чем геморроиться с батниками, осваивайте Powershell, где работать с метками файлов на порядок проще.

Например, вывести имена файлов и даты изменения и отсортировать по дате изменения:
Код: Выделить весь код
dir "C:\Windows" |select name,LastWriteTime |sort lastwritetime

Name                              LastWriteTime      
----                              -------------      
IsUn0419.exe                      07.10.1998 18:14:18
IsUninst.exe                      29.10.1998 16:45:06
WLXPGSS.SCR                       31.03.2014 22:34:22
system.ini                        10.07.2015 14:02:40
CSC                               08.02.2016 10:38:14
eReg.dat                          07.03.2016 20:31:28
DirectX.log                       20.03.2016 10:14:34
popcinfo.dat                      19.03.2017 9:24:05 
UpdateAssistantV2                 14.06.2017 22:12:14
VPNInstall.MIF                    06.04.2018 19:25:42
DDACLSys.log                      04.05.2018 0:49:16 
pyw.exe                           20.10.2018 14:06:16
py.exe                            20.10.2018 14:06:16
pyshellext.amd64.dll              20.10.2018 14:08:32
InfusedApps                       23.12.2018 22:57:15
VPNUnInstall.MIF                  27.12.2018 20:39:56
RtlExUpd.dll                      15.04.2019 5:13:56 
progress.ini                      06.12.2019 19:10:36
write.exe                         07.12.2019 0:29:00 
и т. д.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 18:37, 31-08-2021 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=Z:\Box_In"
	Set "Mask=*.xlsx"
	Set "DateMask=^[2-9][0-9][0-1][0-9][0-3][0-9] .*"

	Set "MyDate=%Date:~-2%%Date:~3,2%%Date:~0,2% "

	Pushd "%BoxIn%" ||(Echo Filder "%BoxIn%" not found &Pause &Exit /B 1) 
	For /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D /O:-D /T:W`) Do (
		Set "Name=%%f"
		Set "Dfile=%%~tf"
		Call Set "Dfile=%%Dfile:~0,10%%"
		Call Echo %%Name%%| >nul 2>&1 FindStr /I /X /R /C:"%DateMask%" &&Call Set "Name=%%Name:~7%%"
		Call :MyReName "%%f" "%%Name%%" "%Date%" "%%Dfile%%" "%MyDate%" ||(Popd &Exit /B 0)
	)
	Popd
pause
Exit /B 0

:MyReName
	If %3==%4 (Ren %1 "%~5%~2") Else (Exit /B 1) 
Exit /B 0
Предполагается, что формат даты в системе имеет вид дд.мм.гггг
Иначе понадобятся небольшие корректировки.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 31-08-2021 в 23:59.


Отправлено: 20:10, 31-08-2021 | #3


Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
к »
Дело в том, что есть необходимость переименовывать файлы которые изменялись текущей датой, это понятно что можно и тоталом смотреть измененные, но ручками не хочется сохранять в формат - 210901 тест.xlsx, а хочется просто сохранить test.xlsx запустить батник и он сам переименует этот файлик (и кучу других) в формат 210901 test.xlsx

Цитата megaloman:
Предполагается, что формат даты в системе имеет вид дд.мм.гггг
Иначе понадобятся небольшие корректировки »
А реально переделать в формат даты - 21 (год) 09 ( месяц) 01 (день) пробел тест.xlsx, выглядить должен так - 210901 test.xlsx

Еще ньюанс, если файл уже был изменен например вчера и имеет имя - 210831 тест.xlsx, я его открываю сегодня, т.е. 01.09, сохраняю и запускаю батник, он должен находить имена файлов которые начинаются на 21**** и заменять эти символы на текущую дату, дата использования батника будет с 01.09, т.е. потенциально файлы все будут начинаться на 21(м)(д) имя.расширение

Отправлено: 09:53, 01-09-2021 | #4


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Цитата ovrtke:
необходимость переименовывать файлы которые изменялись текущей датой »
Вот и вопрос - что это за необходимость такая. Для чего переименовывать, если метку даты и так можно извлечь из соответствующего поля?

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:57, 01-09-2021 | #5


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


ovrtke, речь идет о формате даты в системе. То есть, как отображается дата в командах
Echo %date%
Dir.
Результат батника - "ггммдд имяфайла.xlsx"
где ггммдд сформирован из сегодняшней даты.
Пробуйте, спрашивайте.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 10:06, 01-09-2021 | #6


Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: jpg Screenshot_7.jpg
(14.1 Kb, 3 просмотров)

Цитата megaloman:
Предполагается, что формат даты в системе имеет вид дд.мм.гггг
Иначе понадобятся небольшие корректировки. »
Такой вот error, и не нашел где прописать путь сканирования файлов ?

Отправлено: 10:11, 01-09-2021 | #7


Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: jpg Screenshot_7.jpg
(14.1 Kb, 2 просмотров)

Цитата DJ Mogarych:
Вот и вопрос - что это за необходимость такая. Для чего переименовывать, если метку даты и так можно извлечь из соответствующего поля? »
Нужно мониторить кто что изменял

Отправлено: 10:14, 01-09-2021 | #8


Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


Придумал как сделать, только нужен небольшой upgrade. Нужно дописать если файл содержит вначале "21**** имя.xlsx" - удалять первые 6 символов и заменять на текущую дату. Проверил, батник переименовывает датой когда последняя дата изменения файла была, если ты открываешь документ - чего то меняешь и сохраняешь и запускаешь батник он переименовывает вот так: - 210901 210831 test.txt - т.е. вчерашнюю дату не изменяет и не удаляет а добавляет новую. Если имя файла было тест.xlsx и изменение было 210808 то батник переименовывает его как 210808 тест.xlsx. Помогите сделать апргрейд кода ))

У меня мысли крутятся, что нужно добавить: выделить подстроку с помощью set и запихнуть в if и прописать условие поиске, если 21**** тест.xlsx то удаляем первые 6 символов и заменяем их на текущие, как это сделать не пойму

Код: Выделить весь код
@echo off
SetLocal EnableDelayedExpansion
set "workdir=c:\temp"
for /f "tokens=* delims=" %%a in ('dir /tc /o:-d /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"
)
pause

Отправлено: 10:39, 01-09-2021 | #9


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


ОК, а как вы поймёте, кто изменял?

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 10:41, 01-09-2021 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Поиск и переименование файлов с помощью BATника

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Копирование папки с файлами с помощью batника Stgean Скриптовые языки администрирования Windows 6 19-04-2019 12:00
CMD/BAT - Поиск и копирование файлов с помощью пакетного файла. Svtln Скриптовые языки администрирования Windows 4 09-04-2017 18:03
CMD/BAT - Архивирование, переименование и перемещение файлов с помощью BAT-файла kirillius Скриптовые языки администрирования Windows 7 13-05-2016 12:57
CMD/BAT - Поиск, переименование и создание Дима_Качуров@vk Скриптовые языки администрирования Windows 2 25-07-2012 15:27
[решено] поиск и переименование файлов exo Хочу все знать 5 26-08-2011 17:05




 
Переход