CMD/BAT - [решено] Создание папок с именем дат

Аватара пользователя
gon_za

Re: CMD/BAT - [решено] Создание папок с именем дат

Сообщение gon_za »

Цитата megaloman:



gon_za, У Вас явный избыток времени☺, вручную Вы тоже руководствуетесь при копировании какими-то правилами. Поставьте задачу полностью: у меня есть папка с файлами, их надо скопировать (перенести?) по подпапкам в соответствии с моими (какими?) правилами.

Как идея: вводите как бы даты в формате дд.мм.гггг, при этом не проверяем, дата ли это, главное, чтобы гггг был в диапазоне, допустим, от 1900 до 2100, мм от 1 до 12, дд от 1 до 31. Далее откуда- то выбираем Ваши файлы, идентифицируем их дату (создания, изменения, выделяем дату из имени - тут Вам виднее), преобразуем даты в число и анализируем, попадает ли файл в заданный диапазон. Например:

Файл с датой 06.03.2016 отвечает условию 20160231
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Создание папок с именем дат

Сообщение megaloman »

Если начальная и конечная дата в пределах одного месяца, то всё нормально, в противном в любом месяце принимается число дней 31. Делать контроль на правильное число дней в месяце нет моральных сил.

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@Echo Off
cls
SetLocal EnableExtensions EnableDelayedExpansion
Set /P Date1= Input first Date dd.mm.yyyy=
Call :ErrDate "%Date1%" "YDM"
If Not %Log%==1 GoTo :End
Set /A YDM1=%YDM%
Set /P Date2= Input  last Date dd.mm.yyyy=
Call :ErrDate "%Date2%" "YDM"
If Not %Log%==1 GoTo :End
Set /A YDM2=%YDM%
FOR /L %%i IN (%YDM1%,1,%YDM2%) DO (
	Set /A YDM=%%i
	Set /A YY=1!YDM:~0,4!
	Set /A MM=1!YDM:~4,2!
	Set /A DD=1!YDM:~6,2!
	If 101 LEQ !DD! If !DD! LEQ 131 If 101 LEQ !MM! If !MM! LEQ 112 Md !YDM:~0,4!.!YDM:~4,2!.!YDM:~6,2! 2>nul
)
GoTo :Eof
:End
Echo %YDM%  Input date not correct 
pause
GoTo :Eof
:ErrDate
	Set "%~2=%~1"
	Set "Log=0"
	Set "Dot=%~1"
	If "%Dot:~2,1%%Dot:~5,1%"==".." Set "Log=1"
	If !Log!==1 (Set "Log=0" &Set "DD=1%Dot:~0,2%" &Set /A DD=!DD!*2/2 2>nul &&If 1%Dot:~0,2% EQU !DD! Set "Log=1")
	If !Log!==1 (Set "Log=0" &Set "MM=1%Dot:~3,2%" &Set /A MM=!MM!*2/2 2>nul &&If 1%Dot:~3,2% EQU !MM! Set "Log=1")
	If !Log!==1 (Set "Log=0" &Set "YY=1%Dot:~6,4%" &Set /A YY=!YY!*2/2 2>nul &&If 1%Dot:~6,4% EQU !YY! Set "Log=1")
	If !Log!==1 (Set "Log=0" &If 101 LEQ !DD! If !DD! LEQ 131 Set "Log=1")
	If !Log!==1 (Set "Log=0" &If 101 LEQ !MM! If !MM! LEQ 112 Set "Log=1")
	If !Log!==1 (Set "Log=0" &If 11980 LEQ !YY! If !YY! LEQ 12100 Set "Log=1")
	If !Log!==1 Set "%~2=%YY:~1,4%%MM:~1,2%%DD:~1,2%"
GoTo :Eof
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Создание папок с именем дат

Сообщение megaloman »

VBS-скрипт. Папки создаются с именами корректных дат

[spoiler]Код:
[/spoiler]

Код: Выделить всё

Set WShell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
TDir = WShell.CurrentDirectory
Date1 = InDate(InputBox("Вводите дату в формате дд.мм.гггг", "Начальная дата"))
Date2 = InDate(InputBox("Вводите дату в формате дд.мм.гггг", "Конечная дата"))
For D = Date1 To Date2
'    MsgBox CStr(Date1) + "  " + CStr(Date2) + vbCrLf + CStr(D)
    On Error Resume Next
    FSO.CreateFolder (TDir + "\" + CStr(Year(D)) + "." + Right(CStr(Month(D) + 100), 2) + "." + Right(CStr(Day(D) + 100), 2))
'    If Err.Number0 Then
'	MsgBox err.description
'    End If
Next
WScript.Quit
Function InDate(Dtin)
    If IsDate(Dtin) Then
        InDate = CDate(Dtin)
    Else
        MsgBox Dtin + vbCrLf + "Дата введена неверно"
        WScript.Quit
    End If
End Function





alpap,
Цитата alpap:



решите ребус:

сколько и каких папок будет создано из диапазона: 27.02.2017 - 3.03.2017?



- а в чём подвох, ночь не буду спать пока не узнаю Изображение , мой скрипт выдал 5 папок
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Создание папок с именем дат

Сообщение Iska »

Цитата megaloman:



- а в чём подвох, ночь не буду спать пока не узнаю , мой скрипт выдал 5 папок
CMD/BAT - [решено] Создание папок с именем дат




Високосный, або нет, год же Изображение.
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Создание папок с именем дат

Сообщение megaloman »

Iska, Вы меня пугаете! Я не смотрю последнее время по ящику новости: что, следующий год объявили високосным?
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Создание папок с именем дат

Сообщение megaloman »

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

Вернуться в «Скриптовые языки администрирования Windows»