标题: [日期时间] [已解决]批处理如何输出指定范围内的完整日期? [打印本页]
作者: jellyhk 时间: 2011-11-11 17:30 标题: [已解决]批处理如何输出指定范围内的完整日期?
本帖最后由 jellyhk 于 2011-11-12 21:35 编辑
郁闷!语文差了不知道该怎么写正确合理的标题!
标准格式为:20110101[这是年月日]
有2个变量一个sta[为输入开始年月日]
一个end[为输入结束年月日]
要求:显示中间包含的所有正确年月日。(当然能力不够可以把每个月都当31天显示也行)
例如:set sta=20110101 set end=20120202
[写出来的代码最好能这样----我输入end=99991231也能正确显示-------------如果没时间做这段就算了]
显示格式:
20110101
20110102
20110103
......
20111231
::这里就是下一年的过度了
20120101
...
20120202
作者: CrLf 时间: 2011-11-11 20:27
本帖最后由 CrLf 于 2011-11-12 22:07 编辑
正好以前写过类似的- @echo off&setlocal enabledelayedexpansion
- set /p start=StartDate(YYYYMMDD):
- set /p end=EndDate (YYYYMMDD):
- for /l %%a in (101 1 131) do (
- set str=%%a
- set b=!b! !str:~-2!
- if %%a leq 112 set a=!b!
- )
- (for /l %%a in (%start:~,-4% 1 %end:~,-4%) do (
- for %%b in (%a%) do (
- for %%c in (%b%) do (
- set /a "test=(%%a%%b%%c-start|end-%%a%%b%%c)>>31"
- if !test!==0 echo %%a%%b%%c
- )
- )
- ))>tmp 2>nul
- findstr /ve "0[2469]31 0230 1131 [02468][048]000229 [13579][26]000229" tmp|findstr /e "[^2].. 12.. 02[0-1]. 022[0-8] [02468][048]0229 [13579][26]0229">结果.txt
- pause
复制代码
原算法有数值溢出问题,已修改
作者: 601997526 时间: 2011-11-11 20:41
这个有点意思,我也来写一个
作者: 601997526 时间: 2011-11-11 21:25
- @echo off&setlocal enabledelayedexpansion
- set date=%date%
- :sta
- cls
- set /p sta=[输入开始年月日]
- echo %sta%|findstr "^[0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9]$" >nul||goto :sta
- :end
- cls
- set /p end=[输入结束年月日]
- echo %end%|findstr "^[0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9]$" >nul||goto :end
- echo 正在计算日期……
- set 年1=%sta:~0,4%&set 年2=%end:~0,4%
- set 月1=%sta:~4,2%&set 月2=%end:~4,2%&set 月end=12
- set 日1=%sta:~6,2%&set 日2=%end:~6,2%&set 日end=31
- for /l %%a in (1%年1% 1 1%年2%) do (set 年=%%a
- if "%%a"=="1%年2%" set 月end=%月2%
- for /l %%b in (1!月1! 1 1!月end!) do (set 月=%%b
- if "%%a"=="1%年2%" (if "1!月end!"=="%%b" set 日end=%日2%)
- for /l %%c in (1!日1! 1 1!日end!) do (set 日=%%c
- date !年:~-4!-!月:~-2!-!日:~-2! <nul>nul&&echo !年:~-4!!月:~-2!!日:~-2! >>b.txt
- )
- set 日1=01
- )
- set 月1=01
- )
- date %date%
复制代码
作者: awk 时间: 2011-11-12 00:59
http://bbs.bathome.net/thread-12669-1-1.html
作者: jellyhk 时间: 2011-11-12 21:34
高手就是高手!轻轻一想就搞定了!成功!慢慢回家看!眼睛花了!
作者: jellyhk 时间: 2011-11-13 11:44
回复 2# CrLf
下面都忽略符号 “-”为了数字好看不眼睛花
有个bug啊!我输入2011-01-01-01---------2011-02-02-02
也能算....2011-01-01-02
------------------斑竹改的时候帮忙正确输出日期的后面加几个数字---
例如:正确输出日期后加了数字01-20是
2011-01-0101
2011-01-0202
...
2011-01-2020 <只加到20再从1-20
2011-01-2101 <这里是01不能是1
....
2011-02-1020 <这里又是20
2011-02-1101 <又是01
一直01-20重复
作者: CrLf 时间: 2011-11-13 11:59
回复 7# jellyhk
你举的例子不是没有 - 的吗?怎么测试时又加个 -?
作者: jellyhk 时间: 2011-11-13 12:16
测试没加 -
这里是方便看,数字多了眼花 忽略它
作者: CrLf 时间: 2011-11-13 12:18
本帖最后由 CrLf 于 2011-11-13 12:21 编辑
- @echo off&setlocal enabledelayedexpansion
- set /p @start=StartDate(YYYYMMDD):
- set /p @end=EndDate (YYYYMMDD):
- set @|findstr /vx "@[a-t]*=[0-9]*[0-9][0-9][0-9][0-9]"&&(
- echo 错误的日期格式
- pause&endlocal&%0
- )
- for /l %%a in (101 1 131) do (
- set str=%%a
- set b=!b! !str:~-2!
- if %%a leq 112 set a=!b!
- if %%a leq 120 set c=!b!
- )
- (for /l %%a in (%@start:~,-4% 1 %@end:~,-4%) do (
- for %%b in (%a%) do (
- for %%c in (%b%) do (
- set /a "test=(%%a%%b%%c-%@start:-=%|%@end:-=%-%%a%%b%%c)>>31"
- if !test!==0 echo %%a%%b%%c
- )
- )
- ))>tmp1 2>nul
- findstr /ve "0[2469]31 0230 1131 [02468][048]000229 [13579][26]000229" tmp1|findstr /e "[^2].. 12.. 02[0-1]. 022[0-8] [02468][048]0229 [13579][26]0229">tmp2
- (for /f %%a in ('find /c /v ""^<tmp2') do (
- for /l %%b in (1 20 %%a) do (
- setlocal
- for %%c in (%c%) do (
- set /p var=
- echo;!var!%%c
- )
- endlocal
- )
- ))<tmp2 >结果.txt
- del tmp?>nul
- pause
复制代码
作者: jellyhk 时间: 2011-11-13 12:47
谢了。成功!解决了我一大烦恼!顺便问问这3句代码每句个是什么意思!
if not defined str goto end
set "str=%str:"=%"
if defined str call :count
作者: jellyhk 时间: 2011-11-13 12:53
斑竹!我反了个大错!郁闷!一看结果发现我上面要求说错了!该是
每一个相同的年月日后加01-20
2011-01-01-01
2011-01-01-02
...
2011-01-01-20
...
2011-01-02-01
2011-01-02-02
....
2011-01-02-20
作者: jellyhk 时间: 2011-11-13 12:54
你这代码怕我要隔几年才看的懂!自己改不了!真是对不起!
作者: CrLf 时间: 2011-11-13 14:08
把这部分- (for /f %%a in ('find /c /v ""^<tmp2') do (
- for /l %%b in (1 20 %%a) do (
- setlocal
- for %%c in (%c%) do (
- set /p var=
- echo;!var!%%c
- )
- endlocal
- )
- ))<tmp2 >结果.txt
复制代码
替换成:- (for /f %%a in (tmp2) do (
- for %%b in (%c%) do echo %%a%%b
- ))>结果.txt
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |