|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Изменение даты в названии файла/папки |
|
|
CMD/BAT - [решено] Изменение даты в названии файла/папки
|
Пользователь Сообщения: 60 |
Профиль | Отправить PM | Цитировать Здравствуйте, есть батник добавляющий дату в начало файла/папки:
@echo off set CURDATE=%date:~6,4%.%date:~3,2%.%date:~0,2% ren %1 "%~d2%~p2%CURDATE% %~n1%~x1" set CURDATE= @echo off set CURDATE=%date:~6,4%.%date:~3,2%.%date:~0,2% `для файлов: copy %1 "%~d2%~p2%CURDATE% %~n1%~x1" `для папок: xcopy %1 "%~d2%~p2%CURDATE% %~n1%~x1" /H /Y /C /R /S /E /V /I /Q set CURDATE= 1. При добавлении: если обнаружена дата в названии файла/папки, она заменялась на текущую, а не добавлялась? 2. При копировании: если обнаружена дата, копировалось с текущей датой, а не добавлялась дата к существующей? |
|
Отправлено: 22:01, 21-11-2021 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Для начала — сменить пакетные файлы на что-либо более вменяемое, где есть нормальные регулярные выражения и работа с типом ДатаВремя, например, WSH/PoSH.
|
Отправлено: 23:55, 21-11-2021 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2706
|
Профиль | Отправить PM | Цитировать Sta1917, один батник для всего
@Echo Off cls & If "%~1"=="" Exit /B FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETime /VALUE') DO Set "CurDate=%%d" Set "CurDate=%CurDate:~0,8%" Set "In=%~1" If "%In:~-1%"=="\" Set "In=%In:~0,-1%" If "%~2"=="" Call :MyReName "%In%" &Exit /B Call :MyReName "%In%" "Out" If Not Exist "%In%\*.*" ( Copy "%In%" "%~dp2%Out%" ) Else ( Xcopy "%In%\*.*" "%~dp2%Out%" /H /Y /C /R /D /E /V /I /Q ) Exit /B :MyReName Set "In1=%~nx1" Echo %~nx1| >nul 2>nul FindStr /X /R /C:"^20[0-4][0-9][0-1][0-9][0-3][0-9].*$" If %ErrorLevel%==0 (Set "In1=%CurDate%%In1:~8%") Else (Set "In1=%CurDate% %In1%") If "%~2"=="" (Ren "%In%" "%In1%") Else (Set "%~2=%In1%") Exit /B |
------- Последний раз редактировалось megaloman, 07-04-2022 в 17:17. Отправлено: 08:34, 22-11-2021 | #3 |
Пользователь Сообщения: 60
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата megaloman:
Можно ли сделать копирование с добавлением горячей клавиши (например Shift)? Корректно работает только: можно заставить работать: или |
||
Отправлено: 11:35, 23-11-2021 | #4 |
Ветеран Сообщения: 2706
|
Профиль | Отправить PM | Цитировать Цитата Sta1917:
batnik.bat "Z:\тра ля ля\оба на.ух" batnik.bat "Z:\тра ля ля\20011231 ой ё.mp3" сегодня получим "Z:\тра ля ля\20211123 оба на.ух" "Z:\тра ля ля\20211123 ой ё.mp3" Цитата Sta1917:
Цитата Sta1917:
Дату беру из WMIC (ГГГГММДДччммсс) в CurDate и этот формат не зависит от формата даты, как у Вас настроено в системе. CurDate=%CurDate:~0,8% выдаёт ГГГГММДД Не понимаю, что Вас в этом не устраивает. Хотите использовать Date - не смею ограничивать Вашу свободу В Вашем примере могу предположить, что Date выдаёт ДД.ММ.ГГГГ, соответственно Set "CurDate=%Date:~6,4%%Date:~3,2%%Date:~0,2%" Виноват! Не вник в Ваш код, а Вы не озвучили, Вам хочется формат даты в именах ГГГГ.ММ.ДД,
а я сделал для ГГГГММДД Исправил @Echo Off cls & If "%~1"=="" Exit /B FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETime /VALUE') DO Set "CurDate=%%d" Set "CurDate=%CurDate:~0,4%.%CurDate:~4,2%.%CurDate:~6,2%" Set "In=%~1" If "%In:~-1%"=="\" Set "In=%In:~0,-1%" If "%~2"=="" Call :MyReName "%In%" &Exit /B Call :MyReName "%In%" "Out" If Not Exist "%In%\*.*" ( Copy "%In%" "%~dp2%Out%" ) Else ( Xcopy "%In%\*.*" "%~dp2%Out%" /H /Y /C /R /D /E /V /I /Q ) Exit /B :MyReName Set "In1=%~nx1" Echo %~nx1| >nul 2>nul FindStr /X /R /C:"^20[0-4][0-9]\.[0-1][0-9]\.[0-3][0-9].*$" If %ErrorLevel%==0 (Set "In1=%CurDate%%In1:~10%") Else (Set "In1=%CurDate% %In1%") If "%~2"=="" (Ren "%In%" "%In1%") Else (Set "%~2=%In1%") Exit /B |
||||
------- Последний раз редактировалось megaloman, 07-04-2022 в 17:18. Отправлено: 15:18, 23-11-2021 | #5 |
Пользователь Сообщения: 60
|
Профиль | Отправить PM | Цитировать Прошу прощения за долгий ответ.
Ув. megaloman я спутал теплое с мягким, предполагая что смогу разнести Ваше решение на два скрипта. При выделении и вызове контекстного меню по правой кнопке мыши появляются два пункта, они разные, в зависимости от того файл это или папка. 1. При выделении файла и вызове контестного меню по правой кнопке мыши настроены два пункта: а) добавить дату в название rename_date.cmd
б) копировать с датой copy_date.cmd
2. При выделении папки и вызове контестного меню по правой кнопке мыши настроены два пункта: а) добавить дату к папке add_date_to_name_folder.cmd
б) копировать папку с датой copy_and_add_date_to_name_folder.cmd
Соответственно вопросы те же, как сделать: 1. При добавлении: если обнаружена дата в названии файла/папки, она заменялась на текущую, а не добавлялась? 2. При копировании: если обнаружена дата, копировалось с текущей датой, а не добавлялась дата к существующей? |
Последний раз редактировалось Sta1917, 08-12-2021 в 09:12. Причина: Добавил наименования скриптов, поместил их под спойлер Отправлено: 00:05, 05-12-2021 | #6 |
Ветеран Сообщения: 2706
|
Профиль | Отправить PM | Цитировать Цитата Sta1917:
Цитата Sta1917:
Цитата megaloman:
Ранее не размещал, решил, что не интересно. Вы молчали.
Вот вариант, который на входе понимает файл/папку с датой в начале названия с произвольными разделителями или без оного, и вставляет дату с нужным Вам разделителем. @Echo Off cls & If "%~1"=="" Exit /B Set "Delim=" Set "Delim=-" FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETime /VALUE') DO Set "CurDate=%%d" Set "CurDate=%CurDate:~0,4%%Delim%%CurDate:~4,2%%Delim%%CurDate:~6,2%" Set "In=%~1" If "%In:~-1%"=="\" Set "In=%In:~0,-1%" If "%~2"=="" Call :MyReName "%In%" &Exit /B Call :MyReName "%In%" "Out" If Not Exist "%In%\*.*" ( Copy "%In%" "%~dp2%Out%" ) Else ( Xcopy "%In%\*.*" "%~dp2%Out%" /H /Y /C /R /D /E /V /I /Q ) Exit /B :MyReName Set "In1=%~nx1" Set "In2=%In1%" Echo %~nx1| >nul 2>nul FindStr /X /R /C:"^20[0-4][0-9][0-1][0-9][0-3][0-9].*$" &&Set "In1=%In1:~8%" Echo %~nx1| >nul 2>nul FindStr /X /R /C:"^20[0-4][0-9][^0-9][0-1][0-9][^0-9][0-3][0-9].*$" &&Set "In1=%In1:~10%" If "%In1%"=="%In2%" (Set "In1=%CurDate% %In1%") Else (Set "In1=%CurDate%%In1%") If "%~2"=="" (Ren "%In%" "%In1%") Else (Set "%~2=%In1%") Exit /B |
|||
------- Последний раз редактировалось megaloman, 07-04-2022 в 17:19. Причина: Исправлена ошибка, указанная Sta191 Отправлено: 21:23, 05-12-2021 | #7 |
Пользователь Сообщения: 60
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Цитата megaloman:
Два аргумента... в найденном примере так было, у меня заработало. В ком.строке отображается: ren "C:\Users\User\Folder" "2021.12.08 Folder" Передается один аргумент - путь до файла/папки. В сообщении со скриптами добавил их названия, ниже reg файлы для их вызова. Reg файл с пунктами меню по добавлению даты к папке и копированию папки с датой
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\shell\CopyAndAddDateToNameFolder] "MUIVerb"="Копировать папку с датой" "Position"="Top" "icon"="imageres.dll,321" [HKEY_CLASSES_ROOT\Directory\shell\CopyAndAddDateToNameFolder\command] @="\"C:\\TemplatesFolders\\copy_and_add_date_to_name_folder.cmd\" \"%1\"" [HKEY_CLASSES_ROOT\Directory\shell\AddDateToNameFolder] "MUIVerb"="Добавить дату к папке" "Position"="Top" "icon"="shell32.dll,45" [HKEY_CLASSES_ROOT\Directory\shell\AddDateToNameFolder\command] @="\"C:\\TemplatesFolders\\add_date_to_name_folder.cmd\" \"%1\"" Reg файл с пунктами меню по добавлению даты к файлу и копированию файла с датой
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\CopyAndAddDateToNameFile] "MUIVerb"="Копировать с датой" "icon"="shell32.dll,68" [HKEY_CLASSES_ROOT\*\shell\CopyAndAddDateToNameFile\command] @="\"C:\\TemplatesFolders\\copy_date.cmd\" \"%1\"" [HKEY_CLASSES_ROOT\*\shell\AddDateToNameFile] "MUIVerb"="Добавить дату в название" "icon"="shell32.dll,299" [HKEY_CLASSES_ROOT\*\shell\AddDateToNameFile\command] @="\"C:\\TemplatesFolders\\rename_date.cmd\" \"%1\"" Ваш скрипт из последнего сообщения изменяет дату, но если дата уже была текущей - добавляет её еще раз. Должно получиться две функции (вызывать буду через контекстное меню по правой кнопке мыши): 1 Добавить/изменить дату у файла/папки на текущую. 2 Скопировать файл/папку и добавить/изменить дату на текущую. |
||
Последний раз редактировалось Sta1917, 08-12-2021 в 12:41. Отправлено: 09:27, 08-12-2021 | #8 |
Ветеран Сообщения: 2706
|
Профиль | Отправить PM | Цитировать Цитата Sta1917:
|
|
------- Отправлено: 22:52, 09-12-2021 | #9 |
Пользователь Сообщения: 60
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Можно сделать чтобы дата с вставлялась/менялась в конце имени файла/папки перед расширением (с пробелом между названием и датой) + три варианта текста после даты (Зам, Ответ, Запрос)? Могут быть варианты файлов/папок (расширения для примера): Имя файла 2022.03.28.docx Имя файла 2022.03.28 Зам.xls Имя файла 2022.03.28 Ответ.txt Имя файла 2022.03.28 Запрос |
|
Отправлено: 21:32, 28-03-2022 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Изменение даты и времени создания файла | timasadovykh@vk | Скриптовые языки администрирования Windows | 7 | 30-01-2021 21:37 | |
VBS/WSH/JS - изменение даты/времени папки по ее имени | pzh2393 | Скриптовые языки администрирования Windows | 1 | 31-12-2017 07:12 | |
Любой язык - изменение даты/времени папки по ее имени | pzh2393 | Скриптовые языки администрирования Windows | 0 | 17-12-2017 17:34 | |
VBS/WSH/JS - изменение даты создания файла на минус Х дней | nixdorf13 | Скриптовые языки администрирования Windows | 2 | 08-06-2015 14:26 | |
CMD/BAT - [решено] Анализ на количество символов в названии файла/папки | айкот | Скриптовые языки администрирования Windows | 8 | 04-10-2011 16:12 |
|