Компьютерный форум 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=350062)

Гена829999 16-11-2021 15:44 2972134

Как вывести полные названия дней недели в консоли?
 
Здравствуйте!
Как в этом коде реализовать вывод полных названий дней недели?
Скрытый текст
Код:

@Echo off
Echo.>"%temp%\~.ddf"
>nul makecab /d RptFileName="%temp%\~.rpt" /d InfFileName="%temp%\~.inf" -f "%temp%\~.ddf"
for /f "tokens=4,5,6,7,8,9 delims=: " %%a in ('type "%temp%\~.rpt"') do (
        if not defined m call :month %%a
        if not defined current-date (call set "current-date=%%b-%%m%%-%%f")
for /f "tokens=3" %%w in ('type "%TEMP%\~.rpt"') do if not defined current-weekday set "current-weekday=%%w"
for /f "tokens=6" %%t in ('type "%TEMP%\~.rpt"') do if not defined current-time set "current-time=%%t"
)
Del /q "%temp%\~.*"
Echo.Дата: %current-date% День: %current-weekday% Время: %current-time%
Pause&Exit

:month
if "%1"=="Jan" set "m=Января"
if "%1"=="Feb" set "m=Феврвля"
if "%1"=="Mar" set "m=Матра"
if "%1"=="Apr" set "m=Апреля"
if "%1"=="May" set "m=Мая"
if "%1"=="Jun" set "m=Июня"
if "%1"=="Jul" set "m=Июля"
if "%1"=="Aug" set "m=Августа"
if "%1"=="Sep" set "m=Сентября"
if "%1"=="Oct" set "m=Октября"
if "%1"=="Nov" set "m=Ноября"
if "%1"=="Dec" set "m=Декабря"
Exit /B


Код взят отсюда: http://forum.oszone.net/post-2856375.html#post2856375

DJ Mogarych 16-11-2021 16:04 2972142

Цитата:

Цитата Vadikan
Все что угодно, лишь бы не изучать пошик »


Elven 16-11-2021 16:12 2972144

Если так уж хочется именно в этом реализовать...
Код:

powershell -command "(Get-Date).DayOfWeek"

DJ Mogarych 16-11-2021 16:48 2972147

Если хочется по-русски:
Код:

powershell -command "(Get-Date).tostring('dddd')"

megaloman 16-11-2021 19:46 2972165

Код:

@Echo Off
cls
        Set "A=31 12 2019"
        Set "A=1 1 2021"
        Set "A=16 11 2021"

        Call :NdayInWeek %A% "DWeek"
        FOR /F "tokens=%DWeek% delims= " %%i IN ("Понедельник Вторник Среда Четверг Пятница Суббота Воскресенье") DO Set "DWeek=%%i"

        Echo ===== %A%  DWeek=%DWeek%
Pause
Exit /B

rem Номер дня в неделе дд мм гггг имя_переменной
:NdayInWeek
SetLocal
        Set "D=0%1" &Set "M=0%2"
        Set /A D=1%D:~-2%-100,M=1%M:~-2%-100 
        Set /A i=(%3-1901)*365 + (%3-1901)/4 + %D% + (!(%3 %% 4))*(!((%M%-3)^&16))
        EndLocal &Set /A %~4=(%i%+(%M%-1)*30+2*(!((%M%-7)^&16))-1+((65611044^>^>(2*%M%))^&3))%%7+1
Exit /B

Бонус:
Код:

@Echo Off
cls
        Set /A Nmonth=11
        FOR /F "tokens=%Nmonth% delims= " %%i IN ("Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь") DO Set "Smonth=%%i"

        Echo ===== %Nmonth%  Smonth=%Smonth%
Pause
Exit /B


Гена829999 16-11-2021 20:41 2972177

megaloman, megaloman,
Цитата:

Цитата megaloman
Бонус: »

Благодарю!
То есть невозможно сделать, как реализовано имена месяцев в коде!?

Гена829999 16-11-2021 21:27 2972182

megaloman,
Нет, не имеет значение язык
Мне нужно было продолжение кода
А точнее реализация как для отображения месяца также и для недели
Можно и на английском
Echo.>"%temp%\~.ddf"
>nul makecab /d RptFileName="%temp%\~.rpt" /d InfFileName="%temp%\~.inf" -f "%temp%\~.ddf"
for /f "tokens=4,5,6,7,8,9 delims=: " %%a in ('type "%temp%\~.rpt"') do (
if not defined m call :month %%a
if not defined current-date (call set "current-date=%%b-%%m%%-%%f")
for /f "tokens=3" %%w in ('type "%TEMP%\~.rpt"') do if not defined current-weekday set "current-weekday=%%w"
)
Del /q "%temp%\~.*"
Echo.Дата: %current-date% WeekDay: %current-weekday%
Pause&Exit

:month
if "%1"=="Jan" set "m=Января"
if "%1"=="Feb" set "m=Феврвля"
if "%1"=="Mar" set "m=Матра"
if "%1"=="Apr" set "m=Апреля"
if "%1"=="May" set "m=Мая"
if "%1"=="Jun" set "m=Июня"
if "%1"=="Jul" set "m=Июля"
if "%1"=="Aug" set "m=Августа"
if "%1"=="Sep" set "m=Сентября"
if "%1"=="Oct" set "m=Октября"
if "%1"=="Nov" set "m=Ноября"
if "%1"=="Dec" set "m=Декабря"
Exit /B

YuS_2 16-11-2021 21:45 2972187

Цитата:

Цитата Гена829999
То есть невозможно сделать, как реализовано имена месяцев в коде!? »

Невозможно - это слишком пессимистично :)
оптимистичный вариант :)
Код:

@Echo off
Echo.>"%temp%\~.ddf"
>nul makecab /d RptFileName="%temp%\~.rpt" /d InfFileName="%temp%\~.inf" -f "%temp%\~.ddf"
set /p "var="<"%temp%\~.rpt"
for /f "tokens=3,4,5,6,7,8,9 delims=: " %%a in ('echo %var%') do (
        if not defined m call :month %%b
        if not defined current-weekday call :day %%a
        if not defined current-date (call set "current-date=%%c-%%m%%-%%g")
        if not defined current-time (call set "current-time=%%d:%%e:%%f")
)
Del /q "%temp%\~.*"
Echo.Дата: %current-date% День: %current-weekday% Время: %current-time%
Pause&Exit
:month
if "%1"=="Jan" set "m=Января"
if "%1"=="Feb" set "m=Февраля"
if "%1"=="Mar" set "m=Марта"
if "%1"=="Apr" set "m=Апреля"
if "%1"=="May" set "m=Мая"
if "%1"=="Jun" set "m=Июня"
if "%1"=="Jul" set "m=Июля"
if "%1"=="Aug" set "m=Августа"
if "%1"=="Sep" set "m=Сентября"
if "%1"=="Oct" set "m=Октября"
if "%1"=="Nov" set "m=Ноября"
if "%1"=="Dec" set "m=Декабря"
exit /b
:day
if "%1"=="Mon" set "current-weekday=Понедельник"
if "%1"=="Tue" set "current-weekday=Вторник"
if "%1"=="Wed" set "current-weekday=Среда"
if "%1"=="Thu" set "current-weekday=Четверг"
if "%1"=="Fri" set "current-weekday=Пятница"
if "%1"=="Sat" set "current-weekday=Суббота"
if "%1"=="Sun" set "current-weekday=Воскресенье"
Exit /B



Но таки, за пару лет, можно было и powershell подучить, ибо... ибо... как по классику :)

Гена829999 16-11-2021 22:50 2972194

YuS_2,
Благодарю, Вас!
Это и имел ввиду.
Работает как часы!
Временно использовал такой вариант:
Скрытый текст
Код:

set jsfunc=new Date().getDay()
set dialog="about:<script>resizeTo(0,0);new ActiveXObject('Scripting.FileSystemObject').
set dialog=%dialog%GetStandardStream(1).WriteLine(%jsfunc%);close();</script>"
for /f "tokens=* delims=" %%p in ('mshta.exe %dialog%') do set ndow=%%p
for /f "tokens=%ndow%"  %%d in ("Понедельник Вторник Среда Четверг Пятница Суббота Воскресенье") do set dow=%%d
Echo.%dow%


Тоже рабочий

PowerShell, конечно надежный и мощный инструмент.
Не часто использую и поэтому не приводилось изучить.
А надо бы!

megaloman 16-11-2021 23:15 2972199

Гена829999, Ваш изменённый вариант:
Код:

@Echo Off
cls
        For %%i In ("Jan=Января" "Feb=Февраля" "Mar=Марта" "Apr=Апреля" "May=Мая" "Jun=Июня" "Jul=Июля" "Aug=Августа" "Sep=Сентября" "Oct=Октября" "Nov=Ноября" "Dec=Декабря") Do Set "@@M%%~i"
        For %%i In ("Mon=Понедельник" "Tue=Вторник" "Wed=Среда" "Thu=Четверг" "Fri=Пятница" "Sat=Суббота" "Sun=Воскресенье") Do Set "@@D%%~i"

        >"%temp%\%~nx0.ddf" cd.
        >nul makecab /d RptFileName="%temp%\%~nx0.rpt" /d InfFileName="%temp%\%~nx0.inf" -f "%temp%\%~nx0.ddf"

        Set /P OutRpt=<"%temp%\%~nx0.rpt"
        Del "%temp%\%~nx0.*"
        For /f "tokens=3,4,5,6,7 delims= " %%i in ("%OutRpt%") Do (
                Call Set "current-date=%%k-%%@@M%%~j%%-%%m"
                Call Set "current-weekday=%%@@D%%~i%%"
                Call Set "current-time=%%~l"
        )
Echo.Дата: %current-date% День: %current-weekday% Время: %current-time%

Pause
Exit /B


Гена829999 17-11-2021 12:40 2972237

Цитата:

Цитата megaloman
изменённый вариант: »

Еще Оптимистичный и Оптимальный вариант!
И в 3 раза меньше
Спасибо, Благодарю!
Очень Помогли!

megaloman 17-11-2021 15:32 2972265

Гена829999, А вот фэншуйный вариант. Если не принципиально использование makecab с созданием трёх временных файлов, то без этого извращения (с моей точки), хоть длиннее, но без файлов:
Код:

@Echo Off
cls
        For %%i In ("01=Января" "02=Февраля" "03=Марта" "04=Апреля" "05=Мая" "06=Июня" "07=Июля" "08=Августа" "09=Сентября" "10=Октября" "11=Ноября" "12=Декабря") Do Set "@@M%%~i"
        For %%i In ("1=Понедельник" "2=Вторник" "3=Среда" "4=Четверг" "5=Пятница" "6=Суббота" "7=Воскресенье") Do Set "@@D%%~i"

        FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETime /VALUE') DO Set "DateTime=%%d"

        Set "Month=%DateTime:~4,2%"
        Call :NdayInWeek %DateTime:~6,2% %DateTime:~4,2% %DateTime:~0,4% "Wday"

        Call Set "current-date=%DateTime:~6,2%-%%@@M%Month%%%-%%DateTime:~0,4%%"
        Call Set "current-weekday=%%@@D%Wday%%%"
        Set "current-time=%DateTime:~8,2%:%DateTime:~10,2%:%DateTime:~-2%"

Echo.Дата: %current-date% День: %current-weekday% Время: %current-time%

Pause
Exit /B

rem Номер дня в неделе дд мм гггг имя_переменной
:NdayInWeek
SetLocal
        Set "D=0%1" &Set "M=0%2"
        Set /A D=1%D:~-2%-100,M=1%M:~-2%-100 
        Set /A i=(%3-1901)*365 + (%3-1901)/4 + %D% + (!(%3 %% 4))*(!((%M%-3)^&16))
        EndLocal &Set /A %~4=(%i%+(%M%-1)*30+2*(!((%M%-7)^&16))-1+((65611044^>^>(2*%M%))^&3))%%7+1
Exit /B


Гена829999 17-11-2021 22:39 2972319

Цитата:

Цитата megaloman
А вот фэншуйный вариант »

Действительно так и есть!
Wmic конечно умеет четко выполнять поставленную задачу.
Применял когда обычные команды остановки и удаления служб и процессов не справлялись.
И поэтому всегда предпочитаю использовать его.
Вы правы-этот код с WMIC лучше использовать чем с созданием временных файлов
Буду использовать.
Благодарю, Вас!


Время: 22:14.

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