самый простой
Самый простой способ - использовать хорошо спроектированную выделенную библиотеку для работы с датой.
someInterval.overlaps( anotherInterval )
java.time & амп; ThreeTen-Extra
Лучшим в бизнесе является структура
java.time
, встроенная в Java 8 и более поздние версии. Добавьте к этому проект ThreeTen-Extra , который дополняет java.time дополнительными классами, в частности классомInterval
, который нам нужен здесь.Что касается тег
language-agnostic
в этом Вопросе, исходный код для обоих проектов доступен для использования на других языках (помните о своих лицензиях).
Interval
Класс
org.threeten.extra.Interval
удобен, но для него требуются моменты времени дат (java.time.Instant
), а не только значения даты , Поэтому мы переходим к использованию первого момента дня в UTC для представления даты.Instant start = Instant.parse( "2016-01-01T00:00:00Z" ); Instant stop = Instant.parse( "2016-02-01T00:00:00Z" );
Создайте
Interval
для представления этого промежутка времени.Interval interval_A = Interval.of( start , stop );
Мы также можем определить
Interval
с начальным моментом плюсDuration
.Instant start_B = Instant.parse( "2016-01-03T00:00:00Z" ); Interval interval_B = Interval.of( start_B , Duration.of( 3 , ChronoUnit.DAYS ) );
Сравнение с тестом на перекрытия очень просто.
Boolean overlaps = interval_A.overlaps( interval_B );
Вы можете сравнить
Interval
с другимInterval
илиInstant
:Все они используют подход
Half-Open
для определения промежутка времени, в котором начало включено , а окончание - exclusive .
Если я правильно понял ваш вопрос, я думаю, вы хотите просто взять строку, отделить последнее имя каталога и затем использовать его в качестве переменной при настройке вашего zip-файла:
@echo off
set "mypath=C:\TEMP\zip\source\JEAR_20190115"
if "%mypath:~-1%"=="\" set "mypath=%mypath:~0,-1%"
for %%i in (%mypath%) do set "last=%%~nxi"
CScript zip.vbs %mypath% C:\TEMP\zip\target\%last%.zip
Пожалуйста, примите обратите внимание, если вы измените свой путь, чтобы иметь обратную косую черту на вашем пути, то есть:
C:\TEMP\zip\source\JEAR_20190115\
Вы могли бы сначала избавиться от этого, но мы могли бы просто проверить это с помощью:
[112 ]Таким образом, полный сценарий будет выглядеть следующим образом:
@echo off
set "mypath=C:\TEMP\zip\source\JEAR_20190115"
if "%mypath:~-1%"=="\" set "mypath=%mypath:~0,-1%"
for %%i in (%mypath%) do set "last=%%~nxi"
CScript zip.vbs %mypath% C:\TEMP\zip\target\%last%.zip
если, однако, если вы хотите присвоить ему имя файла в каталоге, вам необходимо убедиться, что все имена файлов в папке все то же самое, поскольку мы сможем установить его только с одним именем, которое будет последним файлом в списке, мы можем проверить каждое имя, но я предполагаю, что у вас есть файлы с одинаковым именем, но с разными расширениями:
@echo off
set "mypath=C:\TEMP\zip\source\JEAR_20190115"
for /f %%i in ('dir /b /a-d "%mypath%"') do set "last=%%~ni"
CScript zip.vbs %mypath% C:\TEMP\zip\target\%last%.zip