Показать полную графическую версию : [решено] 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%
хочу создать список всех дат »
А Вас не смущает наличие в Вашем списке таких дат, как 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!
)))
Но я не вижу в этом никакого смысла. Зачем нужна предложенная задача? Это кусок какой-то бОльшей задачи? Может не надо так упрощать?
Зачем нужна предложенная задача? Это кусок какой-то бОльшей задачи? Может не надо так упрощать? »
Может, человек пишет продолжения календаря майя ;).
С учётом необходимости вывода правильного числа дней в месяцах (в т. ч. и 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.