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

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

Ответить
Настройки темы
CMD/BAT - Bat - добавить дату к имени

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


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

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


Здравствуйте.

Есть папка, в которую падают .txt файлы в течении дня.
В этой папке лежат файлы с разными именами, пример:
12345.txt
inv01.txt
prihod.txt
02-04-21 prihod 01.txt
02-04-21 invst.txt
_02-04-21 invst02.txt

Нужно сделать так, что бы bat-ник при запуске, добавлял ко всем файлам в начале текущую дату в формате ДД-ММ-ГГ и не трогал файлы у которых уже есть дата.
т.е. добавить даты только к этим файлам:
12345.txt
inv01.txt
prihod.txt

Отправлено: 23:03, 02-04-2021

 

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

fascinating rhythm


Moderator


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

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


Powershell
Код: Выделить весь код
$t = get-date -Format dd-MM-yy
dir "C:\temp\test\*.txt"  |? name -notmatch "\d{2}-\d{2}-\d{2}" |% {Rename-Item "$($_.FullName)" -NewName "$t $_"}

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

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

Отправлено: 23:28, 02-04-2021 | #2



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

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


Ветеран


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

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


samr, первое — дату лучше представлять не в виде ДД-ММ-ГГ, а в виде ГГГГ-ММ-ДД. Вы не возражаете?

Второе: из представленных файлов и Вашего описания можно сделать вывод, что Ваше описание страдает неточностью, поскольку у файла:
Цитата samr:
_02-04-21 invst02.txt »
нет даты в начале имени (а есть символ «_»). Поясните.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:29, 02-04-2021 | #3


Ветеран


Contributor


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

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


Как заказано. Считаю, что "_02-04-21 invst02.txt" - это неточность постановки, не переименовываю файлы "дд-мм-гг *.*"
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=Z:\Box_In"
	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:~2,2%"

	Pushd "%BoxIn%" && (
		For /f "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D ^| findstr.exe /R /V /C:"^[0-3][0-9]-[0-1][0-9]-[2-3][0-9] .*"`) Do (
			Ren "%%f" "%Now% %%f"
		)
		Popd
	)
pause
Exit /B
Однако я солидарен с Iska, для сортировки и визуального поиска удобнее формат "ГГГГ-ММ-ДД *.*"
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=Z:\Box_In"
	FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO Set "Now=%%d"
	Set "Now=%Now:~0,4%-%Now:~4,2%-%Now:~6,2%"

	Pushd "%BoxIn%" && (
		For /f "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D ^| findstr.exe /R /V /C:"^20[2-3][0-9]-[0-1][0-9]-[0-3][0-9] .*"`) Do (
			Ren "%%f" "%Now% %%f"
		)
		Popd
	)
pause
Exit /B
Но, даже если согласиться с Iska, постановка задачи далеко не идеальна, результат такой работы - громадное количество файлов в одной папке.
Считаю, что полезно было бы делать, например, для каждого месяца отдельную папку и туда перемещать файлы.
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=Z:\Box_In"
	FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO Set "Now=%%d"
	Set "NowM=%Now:~0,4%-%Now:~4,2%"
	Set "Now=%Now:~0,4%-%Now:~4,2%-%Now:~6,2%"

	Pushd "%BoxIn%" && (
		If Not Exist "%NowM%\" Md "%NowM%"
		For /f "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D ^| findstr.exe /R /V /C:"^20[2-3][0-9]-[0-1][0-9]-[0-3][0-9] .*"`) Do (
			Ren "%%f" "%Now% %%f"
		)
		>nul 2>nul Move /Y "%Now% *.*" "%NowM%\"
		Popd
	)
pause
Exit /B

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

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

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


Ветеран


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

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


Цитата megaloman:
для каждого месяца отдельную папку»
а я не раз это тоже говорил что от организации своей работы будет зависеть сложность подобных кодов и свободное время
в данном случае вообще должны быть отдельные директории: "Prixod", "investic", ... внутри папки с месяцами, а файлы должны приходить с четкими именами под эти папки и месяцем и укладываться по назначению и добиться этого надо начиная с себя и выше или ниже по цепочке.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:21, 04-04-2021 | #5


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


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

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


Цитата Iska:
samr, первое — дату лучше представлять не в виде ДД-ММ-ГГ, а в виде ГГГГ-ММ-ДД. Вы не возражаете? »
не возражаю.

Цитата Iska:
нет даты в начале имени (а есть символ «_»). Поясните. »
да, такой знак присутствует «_» - т.е. дату файлу присвоил, но потом пометил его, что к нему я еще вернусь (обработка данных внутри файла не закончена)


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

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


Ветеран


Contributor


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

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


samr,
Цитата Iska:
дату лучше представлять ... в виде ГГГГ-ММ-ДД. Вы не возражаете? »
Цитата samr:
не возражаю. »
Цитата samr:
да, такой знак присутствует «_» »
То есть, не обрабатывать файлы вида:
"ГГГГ-ММ-ДД *.*" и "_ГГГГ-ММ-ДД *.*"
Для этого надо изменить рег. выражение в findstr под For:
Код: Выделить весь код
findstr.exe /R /V /C:"^_*20[2-3][0-9]-[0-1][0-9]-[0-3][0-9] .*"
Примечание: файлы вида "______ГГГГ-ММ-ДД *.*" (количество "_" произвольно) тоже обрабатываться не будут.

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

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

Отправлено: 13:56, 05-04-2021 | #7



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
10 / 2016 - [решено] Добавить скрипт генерации имени c4uran Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 2 10-09-2018 17:21
CMD/BAT - [решено] bat который при запуске системы проверяет дату и запускается в hh.dd.mm.yyyy infoman1@vk Скриптовые языки администрирования Windows 15 07-07-2014 15:02
CMD/BAT - [решено] Запуск bat-файла от имени админа.Как сделать каталог этого bat-файла текущим?? axmed0207 Скриптовые языки администрирования Windows 1 19-01-2012 06:14
CMD/BAT - Таймер для bat(исполняет скрипт в указанное время и дату) caxarok Скриптовые языки администрирования Windows 1 25-10-2011 01:08
VBS/WSH/JS - Добавить в первую строку текстового файла его имя и дату SergeyVD Скриптовые языки администрирования Windows 6 06-07-2011 20:06




 
Переход