PDA

Показать полную графическую версию : [решено] Изменение даты в названии файла/папки


Sta1917
21-11-2021, 22:01
Здравствуйте, есть батник добавляющий дату в начало файла/папки:
@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. При копировании: если обнаружена дата, копировалось с текущей датой, а не добавлялась дата к существующей?

Iska
21-11-2021, 23:55
Для начала — сменить пакетные файлы на что-либо более вменяемое, где есть нормальные регулярные выражения и работа с типом ДатаВремя, например, WSH/PoSH.

megaloman
22-11-2021, 08:34
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

Sta1917
23-11-2021, 11:35
Для начала — сменить пакетные файлы на что-либо более вменяемое, где есть нормальные регулярные выражения и работа с типом ДатаВремя, например, WSH/PoSH »
Если там это реализуется проще - покажите пожалуйста

Sta1917, один батник для всего »
Добавляет/изменяет, как сделать копию файла/папки с текущей датой?
Можно ли сделать копирование с добавлением горячей клавиши (например Shift)?
Корректно работает только:
%CurDate:~0,8%
можно заставить работать:
%date:~6,4%.%date:~3,2%.%date:~0,2% или %CurDate:~2,6%

megaloman
23-11-2021, 15:18
Здравствуйте, есть батник добавляющий дату в начало файла/папки: »Один аргумент - переименовываем. Например:

batnik.bat "Z:\тра ля ля\оба на.ух"
batnik.bat "Z:\тра ля ля\20011231 ой ё.mp3"

сегодня получим "Z:\тра ля ля\20211123 оба на.ух" "Z:\тра ля ля\20211123 ой ё.mp3"И копирующий файл/папку с добавлением текущей даты: »Два аргумента - копируем. Причём второй - папка, как и в Ваших примерах.Корректно работает только: %CurDate:~0,8% »Естественно:
Дату беру из 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При смене формата даты в именах файлов надо переделывать регулярку для определения имеющейся даты в имени и формирование даты.

Sta1917
05-12-2021, 00:05
Прошу прощения за долгий ответ.
Ув. megaloman я спутал теплое с мягким, предполагая что смогу разнести Ваше решение на два скрипта.

При выделении и вызове контекстного меню по правой кнопке мыши появляются два пункта, они разные, в зависимости от того файл это или папка.

1. При выделении файла и вызове контестного меню по правой кнопке мыши настроены два пункта:
а) добавить дату в название


set CURDATE=%date:~6,4%.%date:~3,2%.%date:~0,2%
ren %1 "%~d2%~p2%CURDATE% %~n1%~x1"
set CURDATE=



б) копировать с датой


set CURDATE=%date:~6,4%.%date:~3,2%.%date:~0,2%
copy %1 "%~d2%~p2%CURDATE% %~n1%~x1"
set CURDATE=



2. При выделении папки и вызове контестного меню по правой кнопке мыши настроены два пункта:

а) добавить дату к папке


set CURDATE=%date:~6,4%.%date:~3,2%.%date:~0,2%
ren %1 "%~d2%~p2%CURDATE% %~n1%~x1"
set CURDATE=



б) копировать папку с датой


set CURDATE=%date:~6,4%.%date:~3,2%.%date:~0,2%
xcopy %1 "%~d2%~p2%CURDATE% %~n1%~x1" /H /Y /C /R /S /E /V /I /Q
set CURDATE=



Соответственно вопросы те же, как сделать:
1. При добавлении: если обнаружена дата в названии файла/папки, она заменялась на текущую, а не добавлялась?
2. При копировании: если обнаружена дата, копировалось с текущей датой, а не добавлялась дата к существующей?

megaloman
05-12-2021, 21:23
Прошу прощения за долгий ответ. »Не прошло и десяти лет :) предполагая что смогу разнести Ваше решение на два скрипта »зачем это делать?
один батник для всего » Я писАтель, а не читатель, тем не менее, при прочтении Ваших батников вижу, что для переименования в Ваш батник передаётся один аргумент: ren %1 ........., а в батники для копирования передаются 2, откуда и куда: copy %1 "%~d2..... Повторюсь, в моём батнике анализируется число аргументов и что это, папка или файл. Что батнику скормите, такой результат и получите. @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

Sta1917
08-12-2021, 09:27
Не прошло и десяти лет »
Кто ж поверит что был без компьютера :)
зачем это делать? »
Потому что у меня было два скрипта: один для копирования, другой для вставки. Не думал что это можно в одном совместить.

Два аргумента... в найденном примере так было, у меня заработало. В ком.строке отображается: ren "C:\Users\User\Folder" "2021.12.08 Folder"
Передается один аргумент - путь до файла/папки. В сообщении со скриптами добавил их названия, ниже 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\""



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 Скопировать файл/папку и добавить/изменить дату на текущую.

megaloman
09-12-2021, 22:52
Ваш скрипт из последнего сообщения изменяет дату, но если дата уже была текущей - добавляет её еще раз. »Исправлено

Sta1917
28-03-2022, 21:32
Код:
@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][1-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][1-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 »

Не смог отделить расширение...
Можно сделать чтобы дата с вставлялась/менялась в конце имени файла/папки перед расширением (с пробелом между названием и датой) + три варианта текста после даты (Зам, Ответ, Запрос)?

Могут быть варианты файлов/папок (расширения для примера):
Имя файла 2022.03.28.docx
Имя файла 2022.03.28 Зам.xls
Имя файла 2022.03.28 Ответ.txt
Имя файла 2022.03.28 Запрос

megaloman
31-03-2022, 08:46
Sta1917, Заново пытался понять постановку. Времени прошло ...@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

Set "To=%~2"
If "%To:~-1%"=="\" Set "To=%To:~0,-1%"

Call :MyReName "%In%" "Out"
If Not Exist "%To%\" Md "%To%"
If Not Exist "%In%\*.*" (
Copy "%In%" "%To%\%Out%"
) Else (
Xcopy "%In%\*.*" "%To%\%Out%" /H /Y /C /R /D /E /V /I /Q
)
Exit /B

:MyReName
Set "In1=%~n1"
Set "In2=%In1%"
Echo %~n1| >nul 2>nul FindStr /X /R /C:"^.*20[0-4][0-9][0-1][0-9][0-3][0-9]$" &&Set "In1=%In1:~0,-8%"
Echo %~n1| >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:~0,-10%"
If "%In1%"=="%In2%" (Set "In1=%In1% %CurDate%%~x1") Else (Set "In1=%In1%%CurDate%%~x1")
If "%~2"=="" (Ren "%In%" "%In1%") Else (Set "%~2=%In1%")
Exit /B

rem Если один аргумент при вызове - переименовываем файл или папку из аргумента
rem А что во втором аргументе??? Это обязательно папка, куда копируем.
rem Смысл копирования: есть некий файл/папка, по мере его/её изменения копируем его/её в состоянии на дату.Дата вставляется перед расширением. Другие хотелки требуют других усилий.

Sta1917
05-04-2022, 20:22
Ув. megaloman, Если у папки была дата она не заменяется. Если у файла уже есть дата скрипт добавляет новую.
Я правильно понял, что сложно реализовать добавление после даты переменной. Их выбор не нужен - сделаю несколько вариантов.

megaloman
07-04-2022, 21:18
Sta1917, @Echo Off
cls & If "%~1"=="" (Echo Скрипт был запущен без аргументов. Не делаем. &Pause &Exit /B 2)
If Not Exist %1 (Echo Папка/Файл "%~1" не найден. &Pause &Exit /B 2)

Set "Delim="
Set "Delim=-"

Set "Suf1=" &Set /A Len1=0
Set "Suf2= Зам" &Set /A Len2=4
Set "Suf3= Ответ" &Set /A Len3=6
Set "Suf4= Запрос" &Set /A Len4=7

Set "Suf5=%Suf1%" &Set /A Len5=%Len1%
Set "Suf6=%Suf2%" &Set /A Len6=%Len2%
Set "Suf7=%Suf3%" &Set /A Len7=%Len3%
Set "Suf8=%Suf4%" &Set /A Len8=%Len4%

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%"

Call :Select "%~1" "Num" ||Exit /B 1

Call Set "Suf=%%Suf%Num%%%"
Call Set "Len=%%Len%Num%%%"
Set /A LenA=%Len%+8
Set /A LenB=%Len%+10

Set "In=%~1"
If "%In:~-1%"=="\" Set "In=%In:~0,-1%"

If "%~2"=="" If %Num% LEQ 4 Call :MyReName1 "%In%" &Exit /B
If "%~2"=="" If %Num% GEQ 5 Call :MyReName2 "%In%" &Exit /B

Set "To=%~2"
If "%To:~-1%"=="\" Set "To=%To:~0,-1%"

If %Num% LEQ 4 Call :MyReName1 "%In%" "Out"
If %Num% GEQ 5 Call :MyReName2 "%In%" "Out"
If Not Exist "%To%\" Md "%To%"
If Not Exist "%In%\*.*" (
Copy "%In%" "%To%\%Out%"
) Else (
Xcopy "%In%\*.*" "%To%\%Out%" /H /Y /C /R /D /E /V /I /Q
)
Pause
Exit /B

:MyReName1
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]%Suf%.*$" &&Call Set "In1=%%In1:~%LenA%%%"
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]%Suf%.*$" &&Call Set "In1=%%In1:~%LenB%%%"
If "%In1%"=="%In2%" (Set "In1=%CurDate%%Suf% %In1%") Else (Set "In1=%CurDate%%Suf%%In1%")
If "%~2"=="" (Ren "%In%" "%In1%") Else (Set "%~2=%In1%")
Exit /B

:MyReName2
Set "In1=%~n1"
Set "In2=%In1%"
Echo %~n1| >nul 2>nul FindStr /X /R /C:"^.*20[0-4][0-9][0-1][0-9][0-3][0-9]%Suf%$" &&Call Set "In1=%%In1:~0,-%LenA%%%"
Echo %~n1| >nul 2>nul FindStr /X /R /C:"^.*20[0-4][0-9][^0-9][0-1][0-9][^0-9][0-3][0-9]%Suf%$" &&Call Set "In1=%%In1:~0,-%LenB%%%"
If "%In1%"=="%In2%" (Set "In1=%In1% %CurDate%%Suf%%~x1") Else (Set "In1=%In1%%CurDate%%Suf%%~x1")
If "%~2"=="" (Ren "%In%" "%In1%") Else (Set "%~2=%In1%")
Exit /B

:Select
SetLocal
cls
Echo +++ Обрабатываемый файл/папка: "%~1"
Echo.

Set /A Num=0

Echo %~n1|>nul 2>nul FindStr /I /X /R /C:"^20[0-4][0-9][0-1][0-9][0-3][0-9].*$"&& Call :Define11 "%~1" "Num"
Echo %~n1|>nul 2>nul FindStr /I /X /R /C:"^20[0-4][0-9][^0-9][0-1][0-9][^0-9][0-3][0-9].*$"&& Call :Define12 "%~1" "Num"
If Not %Num%==0 EndLocal &(Set /A %~2=%Num% &Exit /B 0)

Echo %~n1|>nul 2>nul FindStr /I /X /R /C:"^.*20[0-4][0-9][0-1][0-9][0-3][0-9].*$"&& Call :Define21 "%~1" "Num"
Echo %~n1|>nul 2>nul FindStr /I /X /R /C:"^.*20[0-4][0-9][^0-9][0-1][0-9][^0-9][0-3][0-9].*$"&& Call :Define22 "%~1" "Num"
If Not %Num%==0 EndLocal &(Set /A %~2=%Num% &Exit /B 0)

Echo ??? Выбирайте формат даты в имени файла\папки: &Echo.

Echo 1 - "%CurDate%%Suf1% %~nx1"
Echo 2 - "%CurDate%%Suf2% %~nx1"
Echo 3 - "%CurDate%%Suf3% %~nx1"
Echo 4 - "%CurDate%%Suf4% %~nx1"

Echo.

Echo 5 - "%~n1 %CurDate%%Suf5%%~x1"
Echo 6 - "%~n1 %CurDate%%Suf6%%~x1"
Echo 7 - "%~n1 %CurDate%%Suf7%%~x1"
Echo 8 - "%~n1 %CurDate%%Suf8%%~x1"

Echo.
CHOICE /C Z12345678 /N /M "Z-завершить работу, 1,2,3,4,5,6,7,8 >"
Set /A Num=%Errorlevel%

If %Num%==1 (EndLocal &Exit /B 1)
Set /A Num=%Num%-1

Echo.
Echo Выбран пункт %Num%.
CHOICE /C ZNY /N /M "Z-завершить работу, N-изменить выбор, Y-продолжить"
Echo.

If %Errorlevel%==1 (EndLocal &Exit /B 1)
If %Errorlevel%==2 (EndLocal &GoTo :Select)
EndLocal &(Set /A %~2=%Num% &Exit /B 0)

:Define11
Set /A %~2=1
Echo %~n1|>nul 2>nul FindStr /I /X /R /C:"^20[0-4][0-9][0-1][0-9][0-3][0-9]%Suf2%.*$"&& Set /A %~2=2
Echo %~n1|>nul 2>nul FindStr /I /X /R /C:"^20[0-4][0-9][0-1][0-9][0-3][0-9]%Suf3%.*$"&& Set /A %~2=3
Echo %~n1|>nul 2>nul FindStr /I /X /R /C:"^20[0-4][0-9][0-1][0-9][0-3][0-9]%Suf4%.*$"&& Set /A %~2=4
Exit /B

:Define12
Set /A %~2=1
Echo %~n1|>nul 2>nul FindStr /I /X /R /C:"^20[0-4][0-9][^0-9][0-1][0-9][^0-9][0-3][0-9]%Suf2%.*$"&& Set /A %~2=2
Echo %~n1|>nul 2>nul FindStr /I /X /R /C:"^20[0-4][0-9][^0-9][0-1][0-9][^0-9][0-3][0-9]%Suf3%.*$"&& Set /A %~2=3
Echo %~n1|>nul 2>nul FindStr /I /X /R /C:"^20[0-4][0-9][^0-9][0-1][0-9][^0-9][0-3][0-9]%Suf4%.*$"&& Set /A %~2=4
Exit /B

:Define21
Set /A %~2=5
Echo %~n1|>nul 2>nul FindStr /I /X /R /C:"^.*20[0-4][0-9][0-1][0-9][0-3][0-9]%Suf2%.*$"&& Set /A %~2=6
Echo %~n1|>nul 2>nul FindStr /I /X /R /C:"^.*20[0-4][0-9][0-1][0-9][0-3][0-9]%Suf3%.*$"&& Set /A %~2=7
Echo %~n1|>nul 2>nul FindStr /I /X /R /C:"^.*20[0-4][0-9][0-1][0-9][0-3][0-9]%Suf4%.*$"&& Set /A %~2=8
Exit /B

:Define22
Set /A %~2=5
Echo %~n1|>nul 2>nul FindStr /I /X /R /C:"^.*20[0-4][0-9][^0-9][0-1][0-9][^0-9][0-3][0-9]%Suf2%.*$"&& Set /A %~2=6
Echo %~n1|>nul 2>nul FindStr /I /X /R /C:"^.*20[0-4][0-9][^0-9][0-1][0-9][^0-9][0-3][0-9]%Suf3%.*$"&& Set /A %~2=7
Echo %~n1|>nul 2>nul FindStr /I /X /R /C:"^.*20[0-4][0-9][^0-9][0-1][0-9][^0-9][0-3][0-9]%Suf4%.*$"&& Set /A %~2=8
Exit /B

rem Если один аргумент при вызове - переименовываем файл или папку из аргумента

rem Если есть второй аргумент? Это обязательно папка, куда копируем.
rem Смысл копирования: есть некий файл/папка, по мере его/её изменения копируем его/её в состоянии на дату.

rem Если в имени файла нет даты в формате 20ГГММДД или 20ГГ-ММ-ДД то спросим формат имени файла на переименование или копирование
rem Если в имени файла есть дата в формате 20ГГММДД или 20ГГ-ММ-ДД то без вопросов заменим дату с тем же суффиксом
В предыдущих постах я исправил неточность в регулярке. Исправьте у себя тоже. Должно быть:
20[0-4][0-9][0-1][0-9][0-3][0-9]
20[0-4][0-9][^0-9][0-1][0-9][^0-9][0-3][0-9]




© OSzone.net 2001-2012