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

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

Ответить
Настройки темы
CMD/BAT - [решено] Переименовать файлы в директории (rename)

Пользователь


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

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


Здравствуйте. В директории e:\backup присутствуют файлы
RezervnoeKopirovanie.afi
RezervnoeKopirovanie1.afi

С понедельника по пятницу создается силами программы AOMEI создается дифференциальная копия образа. Программа предусматривает возможность выполнения post-script по завершении сеанса резервного копирования. Идея была следующая:

ЧАСТЬ № 1
каждый день после создания резервной копии запускается скрипт переименования файлов *.afi, путем добавления текущей даты в имя файла, то есть

Сегодня:
RezervnoeKopirovanie_08.04.2021.afi

Завтра:
RezervnoeKopirovanie_08.04.2021_09.04.2021.afi
RezervnoeKopirovanie1_09.04.2021.afi

Послезавтра:
RezervnoeKopirovanie_08.04.2021_09.04.2021_10.04.2021.afi
RezervnoeKopirovanie1_09.04.2021_10.04.2021.afi
RezervnoeKopirovanie2_10.04.2021.afi

ЧАСТЬ № 2

Каждую пятницу запускается скрипт, который из директории e:\backup будет находить файл в имени с текущей датой и копировать его на диск f:\

Собственно, до ЧАСТИ № 2 я так и не дошел, застряв в ЧАСТИ № 1, а именно:
при выполнении данной команды

for %%f in ("e:\backup\*.afi") do (rename "*.afi" *_%date%.afi)

RezervnoeKopirovanie.afi переименовывается в RezervnoeKopirovanie.afi_08.04.2021.afi вместо RezervnoeKopirovanie_08.04.2021.afi, а при повторном запуске этой же команды вообще ничего не происходит, то есть
файл RezervnoeKopirovanie.afi_08.04.2021.afi не переименовывается в RezervnoeKopirovanie.afi_08.04.2021.afi_08.04.2021.afi

З.Ы. Хотелось бы конечно еще, чтобы при выполнении скрипта удалялась часть имени с предыдущими датами...
RezervnoeKopirovanie_08.04.2021_09.04.2021_10.04.2021.afi --> RezervnoeKopirovanie_10.04.2021.afi

З.Ы.Ы. Пока писал сообщение мысль посетила, может должно быть не "дописывание даты", а полностью переименование файла?
вместо
(rename "*.afi" *_%date%.afi) --> (rename "*.afi" *RezervnoeKopoirovanie_%date%.afi)

Тем, кто дочитал - РЕСПЕКТ!
Буду признателен за любую помощь!

Отправлено: 18:10, 08-04-2021

 

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

fascinating rhythm


Moderator


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

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


Можно не париться с переименованием, потому что дату создания или изменения можно извлечь и из свойств файла (powershell):
Код: Выделить весь код
cp "$((dir e:\backup\*.afi |? lastwritetime -ge (get-date).Date).FullName)" -Destination F:\
Или воспользоваться robocopy:
Код: Выделить весь код
robocopy e:\backup\*.afi  F:\ /maxage:1
Как вариант - почитать справочку к AOMEI на предмет именования файлов бэкапа, наверняка там что-то есть на эту тему.

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

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

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



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

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


Ветеран


Contributor


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

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


Цитата epoddubniy:
Послезавтра:
RezervnoeKopirovanie_08.04.2021_09.04.2021_10.04.2021.afi
RezervnoeKopirovanie1_09.04.2021_10.04.2021.afi
RezervnoeKopirovanie2_10.04.2021.afi »
Откуда берутся цифирьки 1,2 в файлах, это делает программа создания бэкапа? И до каких пор она будет эти цифирьки ставить (если это она)?
RezervnoeKopirovanie
RezervnoeKopirovanie1
RezervnoeKopirovanie2
Цитата epoddubniy:
каждый день после создания резервной копии запускается скрипт переименования файлов »
Что, в папочке файлы копятся до бесконечности? И, надеюсь, что не все переименовываются ежедневно?
Может, их вообще не надо ежедневно переименовывать (нафиг зачем тогда ЧАСТЬ № 1), а каждую пятницу лишь солнце закатится заставить скрипт переименовать все файлы без даты в имени в файлы с пятничной датой и копировать их куда пожелаете?
Еще вопрос, Вы файлы копируете или перемещаете?
И, кстати,

не в формате:
имя_09.04.2021.afi
имя1_09.04.2021.afi
имя2_09.04.2021.afi
имя3_09.04.2021.afi

а в формате
2021.04.09_имя.afi
2021.04.09_имя1.afi
2021.04.09_имя2.afi
2021.04.09_имя3.afi

По крайней мере тут логика сортировки по имени будет правильной.

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


Последний раз редактировалось megaloman, 09-04-2021 в 16:24.


Отправлено: 15:06, 09-04-2021 | #3


Пользователь


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

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


Цитата DJ Mogarych:
Как вариант - почитать справочку к AOMEI на предмет именования файлов бэкапа, наверняка там что-то есть на эту тему. »
Облазил все и везде в этой программе. Имя файла образа задается либо дефолтное - "Резервное копирование", либо то, которое пользователь назначает.

Вне зависимости от имени образа резервного копирования, если настроена дифференциальная схема, то сначала делается основной архив, а затем к этому архиву (у меня настроено каждый день) создаются дифференциальные копии. При создании каждой дифференциальной копии программа добавляет индекс "1,2,4,...,n"
Цитата megaloman:
Откуда берутся цифирьки 1,2 в файлах, это делает программа создания бэкапа? »
Цитата megaloman:
Еще вопрос, Вы файлы копируете или перемещаете? »
файлы копируются

Цитата megaloman:
Что, в папочке файлы копятся до бесконечности? И, надеюсь, что не все переименовываются ежедневно?
Может, их вообще не надо ежедневно переименовывать (нафиг зачем тогда ЧАСТЬ № 1), а каждую пятницу лишь солнце закатится заставить скрипт переименовать все файлы без даты в имени в файлы с пятничной датой и копировать их куда пожелаете? »
буду признателен, если поможете найти мне ошибку в
Цитата epoddubniy:
for %%f in ("e:\backup\*.afi") do (rename "*.afi" *_%date%.afi) »
Цитата DJ Mogarych:
Или воспользоваться robocopy:
Код:
robocopy e:\backup\*.afi F:\ /maxage:1 »
этот вариант был в голове, хотел попробовать реализовать такой сценарий:
1) создается пятничный образ резервного копирования
2) после создания, либо подключается сетевой диск через net use с необходимыми credentials, либо диск, который не был в сети, включается в сеть (через diskpart)
3) далее через robocopy копируется файл резервного копирования
4) после копирования файла диск снова переходит в состояние "не в сети" или тот, который был подключен через net use отключается через net use /delete
По отдельности эти команды выполнить - имею представление как, но не могу объединить их в пакетный файл т.к., нужно сначала проверить создался ли файл резервного копирования или нет (наверное это можно сделать с помощью запуска постскрипта, путем создания файла в имени с текущей датой, а потом уже использовать оператор if, то есть если текстовый файл существует, начинается копирование), потом, после операции копирования проверить, докопировался он или нет (а это нужно операцию копирования логировать и построчно анализировать выходной файл, если я правильно понимаю, причем цикл должен непрерывно исполняться, пока не найдет строку, например "копирование завершено" - тоже не знаю как реализовать)
Голова ломается, когда речь заходит об if + for + еще и вложенный оператор if...

Отправлено: 22:50, 09-04-2021 | #4


Ветеран


Contributor


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

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


epoddubniy,
Цитата epoddubniy:
буду признателен, если поможете найти мне ошибку в »
То, что вы описали в постановке ЧАСТЬ № 1 делается так:
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=Z:\Backup"

	FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO Set "Now=%%d"
	Set "Now=_%Now:~6,2%.%Now:~4,2%.%Now:~0,4%"

	Pushd "%BoxIn%" && (
		For /f "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D ^| findstr.exe /R /V /C:"^.*%Now%\.afi$"`) Do (
			Ren "%%f" "%%~nf%Now%%%~xf"
		)
		Popd
	)
rem pause
Exit /B
И этот код для корзины, так как ошибка - в самой постановке. У Вас, допустим, бэкапы создаются на протяжении полугода. И что, все эти файлы будут переименовываться? Сначала переименовываете файлы, потом Вам понадобится усечь в имени предыдущие даты. Вы уверены, что после добавления даты в имя файла AOMEI продолжит создавать файлы с добавлением цифирьки после исходного имени?
ИМХО, надо так:

1. Каждый день пусть программа создаёт бэкапы в папке Backup, никакие переименования делать не надо.
2. Раз в неделю, например, запускается скрипт с переименованием имён этих файлов без даты в имени для добавления даты. Причем лучше (не принципиально) впереди в формате ГГГГ.ММ.ДД_
3. Переименованные файлы сегодняшнего дня копируются в указанное место, лучше с созданием подпапки ГГГГ.ММ.ДД
4. Переименованные файлы сегодняшнего дня перемещаются в создаваемую в подпапку папки Backup\ГГГГ.ММ.ДД
В принципе, переименование вообще не имеет смысла (п.2), если периодически разбрасывать группы созданных бэкапов по подпапкам
И Вы совсем не думаете о том, что у Вас будут бэкапы бесконечно накапливаться, смысла в старых - никакого, зато место забьёте всё.

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


Последний раз редактировалось megaloman, 10-04-2021 в 07:39.

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

Отправлено: 07:19, 10-04-2021 | #5


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

fascinating rhythm


Moderator


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

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


Всё проще пареной репы. Бэкап надо запускать из командной строки, и туда сразу подставлять дату.

Powershell
Код: Выделить весь код
$t = (get-date).ToString("yyyy.MM.dd")
& AMBackup.exe /b new /t part /s E /d "\\192.168.0.100\Share\$t`_RezervnoeKopirovanie.adi" /n "BackupToShare" /u "admin" /p "123456"
https://www.ubackup.com/help/command.html

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

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

Отправлено: 10:51, 10-04-2021 | #6


Пользователь


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

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


Цитата DJ Mogarych:
Код:
$t = (get-date).ToString("yyyy.MM.dd")
& AMBackup.exe /b new /t part /s E /d "\\192.168.0.100\Share\$t`_RezervnoeKopirovanie.adi" /n "BackupT »
если я правильно понял, задание в планировщике, которое создает программа, я удаляю, вместо него создаю свое собственное и в качестве исполняемой программы выбираю скрипт ps1?

Отправлено: 12:55, 10-04-2021 | #7


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

fascinating rhythm


Moderator


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

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


Да, только в качестве исполняемой программы не скрипт, а powershell.exe, а аргументы
Код: Выделить весь код
-file "путь к скрипту" -executionpolicy bypass

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

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

Отправлено: 13:50, 10-04-2021 | #8


Пользователь


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

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


Цитата DJ Mogarych:
Код:
$t = (get-date).ToString("yyyy.MM.dd")
& AMBackup.exe /b new /t part /s E /d "\\192.168.0.100\Share\$t`_RezervnoeKopirovanie.adi" /n "BackupTo »
по отдельности команды выполняются, а с амперсандом - нет.

"t$ : Имя "t$" не распознано как имя командлета," - вот такая ошибка появляется

Отправлено: 16:43, 11-04-2021 | #9


Пользователь


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

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


Цитата DJ Mogarych:
Код:
$t = (get-date).ToString("yyyy.MM.dd")
& AMBackup.exe /b new /t part /s E /d "\\192.168.0.100\Share\$t`_RezervnoeKopirovanie.adi" /n "BackupTo »
по отдельности команды выполняются, а с амперсандом - нет.

"t$ : Имя "t$" не распознано как имя командлета," - вот такая ошибка появляется

Отправлено: 19:43, 11-04-2021 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Переименовать файлы Alexander_88 Скриптовые языки администрирования Windows 4 05-07-2019 11:26
PowerShell - Переименовать файлы XML al-1k Скриптовые языки администрирования Windows 11 15-05-2017 19:37
CMD/BAT - Вывести файлы из директории в меню choice setdmg Скриптовые языки администрирования Windows 3 15-10-2014 20:32
CMD/BAT - Переименовать и переместить файлы vider Скриптовые языки администрирования Windows 7 12-05-2013 16:35
$OEM$ директории - не копируются файлы _Flame_ Автоматическая установка Windows 2000/XP/2003 5 19-06-2007 11:58




 
Переход