PDA

Показать полную графическую версию : [решено] for /l ведущий ноль


shmel_sv@vk
17-08-2015, 22:40
хочу создать список всех дат, но не пойму как автоматически добавляять ноль если число от 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
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
хочу создать список всех дат »



А Вас не смущает наличие в Вашем списке таких дат, как 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
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
Зачем нужна предложенная задача? Это кусок какой-то бОльшей задачи? Может не надо так упрощать? »
Может, человек пишет продолжения календаря майя ;).

Georgio
18-08-2015, 23:43
С учётом необходимости вывода правильного числа дней в месяцах (в т. ч. и 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
Ради "спортивного" интереса написал код для пакетного файла ... С учётом необходимости вывода правильного числа дней в месяцах (в т. ч. и 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
спасибо всем большое!!!!




© OSzone.net 2001-2012