『楼 主』:
[讨论]MSDOS环境下获取并分解系统时钟信息的批处理
To All:
今天,根据网上的一段代码[1]修改出一个可以在MSDOS下获取并分解系统时钟信息(日期、时间)的批处理。在MSDOS6.22/MSDOS7.10下运行通过。显然易见的是,程序的冗余度过高,存在大量的重复代码,所以它需要简化,也必然可以简化。本来是要自己修改的,只是最近还在忙其他的题目,无法分心;同时又感觉论坛讨论纯DOS批处理的主题日趋萎缩,所以将它贴上来,大家讨论一下,看有什么好的简化和改进方案,并对其中涉及到的DOS下的词法分析算法进行讨论和优化。当然,网上的此类代码应该还有许多,大家也可以提供更多的资源链接或者自己的想法。
[1] %time%...DOS vs. Win98
http://groups.google.com/group/alt.msdos.batch/browse_thread/thread/faa7a7961815c004/7c979271a52e36e7
@echo off
if "%1"=="[(" goto parse
echo.|date|find "Current" > _getdate.bat
echo set _dw=%%3> current.bat
echo set _date=%%4>> current.bat
call _getdate.bat
echo.|date|find "Enter" > _getdfmt.bat
echo set _dfmt=%%3> enter.bat
call _getdfmt.bat
echo.|time|find "Current" > _gettime.bat
echo set _time=%%3> current.bat
call _gettime.bat
echo _|choice /c%_dfmt%%_date%_%_time%_ @%0 > _parse.bat
%comspec% /e:2048 /c _parse.bat
goto end
:parse
set _dt1=_%2%3
set _dt2=_%5%6
set _dt3=_%8%9
for %%t in ([,Y,Y,-,M,M,-,D,D,]) do shift
set _vdt=
:loop1
shift
set _tmp=%_vdt%
for %%t in (1,2,3,4,5,6,7,8,9,0) do if "%1"=="%%t" set _vdt=%_vdt%%1
if not "%_vdt%"=="%_tmp%" goto loop1
set %_dt1%=%_vdt%
set _vdt=
:loop2
shift
set _tmp=%_vdt%
for %%t in (1,2,3,4,5,6,7,8,9,0) do if "%1"=="%%t" set _vdt=%_vdt%%1
if not "%_vdt%"=="%_tmp%" goto loop2
set %_dt2%=%_vdt%
set _vdt=
:loop3
shift
set _tmp=%_vdt%
for %%t in (1,2,3,4,5,6,7,8,9,0) do if "%1"=="%%t" set _vdt=%_vdt%%1
if not "%_vdt%"=="%_tmp%" goto loop3
set %_dt3%=%_vdt%
set _vdt=
:loop4
shift
set _tmp=%_vdt%
for %%t in (1,2,3,4,5,6,7,8,9,0) do if "%1"=="%%t" set _vdt=%_vdt%%1
if not "%_vdt%"=="%_tmp%" goto loop4
set _HH=%_vdt%
set _vdt=
:loop5
shift
set _tmp=%_vdt%
for %%t in (1,2,3,4,5,6,7,8,9,0) do if "%1"=="%%t" set _vdt=%_vdt%%1
if not "%_vdt%"=="%_tmp%" goto loop5
set _MN=%_vdt%
set _vdt=
:loop6
shift
set _tmp=%_vdt%
for %%t in (1,2,3,4,5,6,7,8,9,0) do if "%1"=="%%t" set _vdt=%_vdt%%1
if not "%_vdt%"=="%_tmp%" goto loop6
set _SS=%_vdt%
set _vdt=
:loop7
shift
set _tmp=%_vdt%
for %%t in (1,2,3,4,5,6,7,8,9,0) do if "%1"=="%%t" set _vdt=%_vdt%%1
if not "%_vdt%"=="%_tmp%" goto loop7
set _CS=%_vdt%
echo DTN:%_YY% %_MM% %_DD% %_HH% %_MN% %_SS% %_CS%
:end [ Last edited by willsort on 2006-3-26 at 23:01 ]
|