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

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

shmel_sv@vk 17-08-2015 22:40 2542863

for /l ведущий ноль
 
хочу создать список всех дат, но не пойму как автоматически добавляять ноль если число от 1 до 9

Цитата:

for /l %%y in (2003,1,2015) do (
for /l %%m in (01,01,12) do (
for /l %%d in (01,01,31) do (
echo %%y-%%m-%%d
)))2>nul
конечно понимаю что можно и так

Цитата:

%%y-0%%m-0%%d
но тогда от 10 до 31 будут тоже нули в начале

Foreigner 18-08-2015 00:39 2542886

shmel_sv@vk, Просто список без проверки на правильность дат
Код:

@echo off
setlocal

for /l %%y in (2003,1,2015) do (

    for /l %%m in (101,1,112) do (

        for /l %%d in (101,1,131) do call:1 %%y %%m %%d
       
))

goto:eof

:1

set m=%2
set d=%3

echo %1-%m:~-2%-%d:~-2%


Georgio 18-08-2015 11:42 2542973

Цитата:

Цитата shmel_sv@vk
хочу создать список всех дат »



А Вас не смущает наличие в Вашем списке таких дат, как 31 февраля или 31 июня?

С учётом необходимости вывода правильного числа дней в месяцах (в т. ч. и 29-ти дней в феврале високосных годов) могу предложить код на PowerShell:
Код:

0..(New-TimeSpan ($d='01.01.2003') '31.12.2015').Days|%{Get-Date (Get-Date $d).AddDays($_) -f 'yyyy-MM-dd'}
.

megaloman 18-08-2015 19:28 2543228

shmel_sv@vk, То же, что и у Foreigner без контроля правильности дат.
Код:

@Echo Off

SetLocal EnableExtensions EnableDelayedExpansion

FOR /L %%g IN (2001,1,2015) DO (
        FOR /L %%m IN (101,1,112) DO (
                Set mm=%%m
                FOR /L %%d IN (101,1,131) DO (
                        Set dd=%%d
                        Echo %%g-!mm:~-2!-!dd:~-2!
)))

Или
Код:

@Echo Off

SetLocal EnableExtensions EnableDelayedExpansion

FOR /L %%g IN (20010000,10000,20150000) DO (
        FOR /L %%m IN (10100,100,11200) DO (
                FOR /L %%d IN (101,1,131) DO (
                        Set /A DT=%%g+%%m+%%d-10100
                        Echo !DT:~0,4!-!DT:~4,2!-!DT:~6,2!
)))

Но я не вижу в этом никакого смысла. Зачем нужна предложенная задача? Это кусок какой-то бОльшей задачи? Может не надо так упрощать?

Iska 18-08-2015 19:32 2543232

Цитата:

Цитата megaloman
Зачем нужна предложенная задача? Это кусок какой-то бОльшей задачи? Может не надо так упрощать? »

Может, человек пишет продолжения календаря майя ;).

Georgio 18-08-2015 23:43 2543319

Цитата:

Цитата Georgio
С учётом необходимости вывода правильного числа дней в месяцах (в т. ч. и 29-ти дней в феврале високосных годов) »



Ради "спортивного" интереса написал код для пакетного файла с выводом результата в файл "Dates.txt":

Код:

@>"Dates.txt" (
for /l %%y in (2003 1 2015) do @(
 for /l %%m in (1 1 12) do @(
  for /l %%d in (1 1 31) do @(
  for %%? in (2 4 6 9 11) do @(
    if %%m%%d equ %%?31 set ?=?
  )
  if %%m%%d equ 230 set ?=?
  for /f %%? in ('set/a %%y%%4') do @(
    for /l %%* in (1 1 3) do @(
    if %%?%%m%%d equ %%*229 set ?=?
    )
  )
  if not defined ? <nul (
    set/p=%%y-
    (if %%m leq 9 set/p=0)& set/p=%%m-
    (if %%d leq 9 set/p=0)& echo %%d
  )
  set ?=
  )
 )
)
)

.

Код получился немного "авангардным" и нетрадиционным, но, вопреки ожиданию, не очень "громоздким".

megaloman 19-08-2015 10:22 2543420

Цитата:

Цитата Georgio
Ради "спортивного" интереса написал код для пакетного файла ... С учётом необходимости вывода правильного числа дней в месяцах (в т. ч. и 29-ти дней в феврале високосных годов)

Код:

@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion

FOR /L %%g IN (2001,1,2016) DO (
        Set /A VG=%%g/4*4
        Set "Cal=131 228 331 430 531 630 731 831 930 1031 1130 1231"
        If !VG!==%%g Set "Cal=131 229 331 430 531 630 731 831 930 1031 1130 1231"
        For %%m In (!Cal!) Do (
                Set /A DD=%%m/100*100+1
                FOR /L %%d IN (!DD!,1,%%m) DO (
                        Set /A DT=%%g*10000+%%d
                        Echo !DT:~0,4!-!DT:~4,2!-!DT:~6,2!
)))

Код получился не очень "громоздким", но всё равно, в чём смысл, от меня ускользает.

shmel_sv@vk 19-08-2015 12:29 2543478

спасибо всем большое!!!!


Время: 00:19.

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