|
fzp1978321
初级用户
积分 110
发帖 50
注册 2008-1-18
状态 离线
|
『楼 主』:
请教如何在WIN2000下提取前一天日期(已结)
这个是在XP下能通过,但是WIN2000下就不行了,请高手指点该如何修改
@echo off
FOR /F "TOKENS=1-3 DELIMS=- " %%A IN ('echo %DATE%') do (set Year=%%A&SET Month=%%B&SET Day=%%C)
FOR %%A IN (%Year%) DO SET Year=%%A
FOR %%A IN (%Month%) DO SET Month=%%A
FOR %%A IN (%Day%) DO SET Day=%%A
SET SortDate=%Year%%Month%%Day%
FOR %%A IN (%Date%) DO SET Today=%%A
SET DayS=%Day%
IF %DayS% EQU 1 (
SET YesterY=%Year%
CALL :RollMonth
) ELSE (
SET /A YesterD=%DayS% - 1
SET YesterM=%Month%
SET YesterY=%Year%
)
IF %YesterD% LSS 10 SET YesterD=0%YesterD%
SET SortYest=%YesterY%-%YesterM%-%YesterD%
CALL ECHO %SortYest%
ENDLOCAL
pause
GOTO:EOF
:RollMonth
IF %Month%==01 (
SET YesterD=31
SET YesterM=12
SET /A YesterY = %Year% - 1
)
IF %Month%==02 (
SET YesterD=31
SET YesterM=01
)
IF %Month%==03 (
SET YesterD=28
SET YesterM=02
CALL :LeapYear
)
IF %Month%==04 (
SET YesterD=31
SET YesterM=03
)
IF %Month%==05 (
SET YesterD=30
SET YesterM=04
)
IF %Month%==06 (
SET YesterD=31
SET YesterM=05
)
IF %Month%==07 (
SET YesterD=30
SET YesterM=06
)
IF %Month%==08 (
SET YesterD=31
SET YesterM=07
)
IF %Month%==09 (
SET YesterD=31
SET YesterM=08
)
IF %Month%==10 (
SET YesterD=30
SET YesterM=09
)
IF %Month%==11 (
SET YesterD=31
SET YesterM=10
)
IF %Month%==12 (
SET YesterD=30
SET YesterM=11
)
GOTO:EOF
:LeapYear
SET /A mod400 = %Year% %% 400
SET /A mod100 = %Year% %% 100
SET /A mod4 = %Year% %% 4
IF %mod400% EQU 0 (
SET YesterD=29
) ELSE (
IF %mod100% EQU 0 (
SET YesterD=28
) ELSE (
IF %mod4% EQU 0 (
SET YesterD=29
) ELSE (
SET YesterD=28
)
)
)
GOTO:EOF
:Syntax
ECHO PREV: Get yesterday
echo %SortYest%
[ Last edited by fzp1978321 on 2008-3-6 at 02:14 PM ]
|
|
2008-3-6 12:11 |
|
|
HAT
版主
积分 9023
发帖 5017
注册 2007-5-31
状态 离线
|
『第
2 楼』:
直接调用VBS里面的date()-1可以吗?
|
|
2008-3-6 12:31 |
|
|
fzp1978321
初级用户
积分 110
发帖 50
注册 2008-1-18
状态 离线
|
|
2008-3-6 12:33 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
4 楼』:
参考一个 不知道2000下怎么样
@echo off
set p1=%date:~0,4%
set p2=%date:~5,2%
set p3=%date:~8,2%
setlocal enabledelayedexpansion
for /l %%a in (1,1,3) do (
for /f "delims=0 tokens=*" %%i in ("!p%%a!") do set p%%a=%%i
)
SET TT=1
if %p3% gtr %TT% goto ppp
:nxt
set/a p2-=1
if %p2% equ 0 set/a p1-=1&&set p2=12
set/a PN2="^!(p1%%4) & ^!(^!(p1%%100)) | ^!(p1%%400)",PN2=28+PN2
for /f "tokens=%p2%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do set/a p3=%p3%+%%i
if %p3% leq %tt% goto nxt
:ppp
set/a p3=%p3%-%tt%
set p2=0%p2%
set p2=%p2:~-2,2%
set p3=0%p3%
set p3=%p3:~-2,2%
echo %p1%-%p2%-%p3%
pause
[ Last edited by terse on 2008-3-6 at 12:43 PM ]
|
简单!简单!再简单! |
|
2008-3-6 12:39 |
|
|
HAT
版主
积分 9023
发帖 5017
注册 2007-5-31
状态 离线
|
『第
5 楼』:
@echo off
>"%tmp%\Yesterday.vbs" echo dt=date()-1
>>"%tmp%\Yesterday.vbs" echo wscript.echo dt
for /f %%a in ('cscript /nologo %tmp%\Yesterday.vbs') do set LastDay=%%a
echo 今天:%date%
echo 昨天:%LastDay%
|
|
2008-3-6 12:58 |
|
|
fastslz
铂金会员
DOS一根葱
积分 5493
发帖 2315
注册 2006-5-1 来自 上海
状态 离线
|
『第
6 楼』:
VBS计算当前日期加减日期
Quote: | @echo off
::::备份系统原时间日期格式
regedit /e "%temp%\bak.reg" "HKEY_CURRENT_USER\Control Panel\International"
::::统一格式化系统日期格式
>aDate.reg echo REGEDIT4
>>aDate.reg echo.
>>aDate.reg echo [HKEY_CURRENT_USER\Control Panel\International]
>>aDate.reg echo "sShortDate"="yyyy-MM-dd"
>>aDate.reg echo "sDate"="-"
>>aDate.reg echo "sTimeFormat"="HH:mm:ss"
regedit /s aDate.reg&del aDate.reg
:::用VBS计算当前日期减 20 天,如果要当前之后的 20 天请将 ↓下面的 -20 改成 +20
>tmp.vbs echo Wscript.echo FormatDateTime (DateAdd("d", -20 ,Date),2)
for /f "delims=" %%i in ('cscript.exe //nologo tmp.vbs') do set aDate=%%i&del tmp.vbs
echo 20天前是 %aDate%
::::这里你批处理的开始
::::还原系统原时间日期格式
regedit /s "%temp%\bak.reg"&del "%temp%\bak.reg"
pause |
|
|
第一高手 第二高手
我的小站
|
|
2008-3-6 13:08 |
|
|
fastslz
铂金会员
DOS一根葱
积分 5493
发帖 2315
注册 2006-5-1 来自 上海
状态 离线
|
『第
7 楼』:
>tmp.vbs echo Wscript.echo FormatDateTime (DateAdd("d", -20 ,Date),2)
for /f "delims=" %%i in ('cscript.exe //nologo tmp.vbs') do set aDate=%%i&del tmp.vbs 简化这样就可以了,但是兼容性不强,而6楼不存在BUG
|
第一高手 第二高手
我的小站
|
|
2008-3-6 13:16 |
|
|
fzp1978321
初级用户
积分 110
发帖 50
注册 2008-1-18
状态 离线
|
|
2008-3-6 14:13 |
|