Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Изменение даты в названии файла/папки (http://forum.oszone.net/showthread.php?t=350106)

Sta1917 21-11-2021 22:01 2972729

Изменение даты в названии файла/папки
 
Здравствуйте, есть батник добавляющий дату в начало файла/папки:
Код:

@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 2972736

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

megaloman 22-11-2021 08:34 2972759

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 2972887

Цитата:

Цитата Iska
Для начала — сменить пакетные файлы на что-либо более вменяемое, где есть нормальные регулярные выражения и работа с типом ДатаВремя, например, WSH/PoSH »

Если там это реализуется проще - покажите пожалуйста

Цитата:

Цитата megaloman
Sta1917, один батник для всего »

Добавляет/изменяет, как сделать копию файла/папки с текущей датой?
Можно ли сделать копирование с добавлением горячей клавиши (например Shift)?
Корректно работает только:
Код:

%CurDate:~0,8%
можно заставить работать:
Код:

%date:~6,4%.%date:~3,2%.%date:~0,2%
или
Код:

%CurDate:~2,6%

megaloman 23-11-2021 15:18 2972923

Цитата:

Цитата Sta1917
Здравствуйте, есть батник добавляющий дату в начало файла/папки: »

Один аргумент - переименовываем. Например:

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

сегодня получим "Z:\тра ля ля\20211123 оба на.ух" "Z:\тра ля ля\20211123 ой ё.mp3"
Цитата:

Цитата Sta1917
И копирующий файл/папку с добавлением текущей даты: »

Два аргумента - копируем. Причём второй - папка, как и в Ваших примерах.
Цитата:

Цитата Sta1917
Корректно работает только: %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 2974295

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

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

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

Код:

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



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

Код:

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



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

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

Код:

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



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

Код:

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 2974390

Цитата:

Цитата Sta1917
Прошу прощения за долгий ответ. »

Не прошло и десяти лет :)
Цитата:

Цитата Sta1917
предполагая что смогу разнести Ваше решение на два скрипта »

зачем это делать?
Цитата:

Цитата megaloman
один батник для всего »

Я писАтель, а не читатель, тем не менее, при прочтении Ваших батников вижу, что для переименования в Ваш батник передаётся один аргумент: 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 2974627

Цитата:

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

megaloman 09-12-2021 22:52 2974772

Цитата:

Цитата Sta1917
Ваш скрипт из последнего сообщения изменяет дату, но если дата уже была текущей - добавляет её еще раз. »

Исправлено

Sta1917 28-03-2022 21:32 2982400

Цитата:

Цитата 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][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 2982494

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 2982796

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

megaloman 07-04-2022 21:18 2982881

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]


Время: 23:23.

Время: 23:23.
© OSzone.net 2001-