PDA

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


Гена829999
16-11-2021, 15:44
Здравствуйте!
Как в этом коде реализовать вывод полных названий дней недели?
@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
Все что угодно, лишь бы не изучать пошик »

Elven
16-11-2021, 16:12
Если так уж хочется именно в этом реализовать...
powershell -command "(Get-Date).DayOfWeek"

DJ Mogarych
16-11-2021, 16:48
Если хочется по-русски:

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

megaloman
16-11-2021, 19:46
@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
megaloman, megaloman, Бонус: »
Благодарю!
То есть невозможно сделать, как реализовано имена месяцев в коде!?

Гена829999
16-11-2021, 21:27
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
То есть невозможно сделать, как реализовано имена месяцев в коде!? »
Невозможно - это слишком пессимистично :)
@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
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
Гена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
изменённый вариант: »
Еще Оптимистичный и Оптимальный вариант!
И в 3 раза меньше
Спасибо, Благодарю!
Очень Помогли!

megaloman
17-11-2021, 15:32
Гена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
А вот фэншуйный вариант »
Действительно так и есть!
Wmic конечно умеет четко выполнять поставленную задачу.
Применял когда обычные команды остановки и удаления служб и процессов не справлялись.
И поэтому всегда предпочитаю использовать его.
Вы правы-этот код с WMIC лучше использовать чем с созданием временных файлов
Буду использовать.
Благодарю, Вас!




© OSzone.net 2001-2012