帮忙看看批处理提取昨日日期中的问题

@echo off&setlocal enabledelayedexpansion
set yyyy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
set /a od=!dd!-1
if !od! lss 10 set od=0!od!
if !od!==0 call :dd0
if !mm!==0 call :mm0
set yyyymmdd=!yyyy!!mm!!od!
echo 昨天是:!yyyymmdd!
pause

:dd0
set /a mm=!mm!-1
for %%a in (1 3 5 7 8 10 12)do set %%add=31
set /a pddd=!yyyy!*10/4
set pd2d=!pddd:~-1,1!
set 2dd=28
if !pd2d!==0 set 2dd=29
for %%b in (4 6 9 11)do set %%bdd=30
set od=!%mm%dd!
goto :eof
:mm0
set /a yyyy=!yyyy!-1
set mm=12 && set od=31
goto :eof

上面的这个批处理在执行时候报错
报错内容:
无效数字。数字常数只能是十进制(17),十六位进制(0x11)或
八进制(021)。
昨天是:2009131
请按任意键继续. . .

永远日期都是20090131

请各位大哥看看,谢谢

第1个回答  2009-02-09
::哈哈.这是我之前写的东西,有问题直接找我啊,改好了.
::注意: 你从网上复制我的内容会在所有内容后面多出个空格的,你要自己删除所有最后的空格就不会出错了.就如"set yyyy=%date:~0,4% ",就是这里最后会多了空格要删除就不会出错了.是所有啊,改为"set yyyy=%date:~0,4%"就对了.
@echo off&setlocal enabledelayedexpansion
set yyyy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
for /l %%m in (1,1,9)do if !mm!==0%%m set mm=%%m
for /l %%d in (1,1,9)do if !dd!==0%%d set dd=%%d
set/a od=!dd!-1
if !od!==0 call :dd0
if !mm!==0 call :mm0
for /l %%m in (1,1,9)do if !mm!==%%m set mm=0%%m
for /l %%d in (1,1,9)do if !od!==%%d set od=0%%d
set yyyymmdd=!yyyy!-!mm!-!od!
echo 昨天是:!yyyymmdd!
pause

:dd0
set/a mm=!mm!-1
for %%a in (1 3 5 7 8 10 12)do set %%add=31
set/a pddd=!yyyy!*10/4
set pd2d=!pddd:~-1,1!
set 2dd=28
if !pd2d!==0 set 2dd=29
for %%b in (4 6 9 11)do set %%bdd=30
set od=!%mm%dd!
goto :eof
:mm0
set/a yyyy=!yyyy!-1
set mm=12&& set od=31
goto :eof

来个VBS+BAT的
@echo off
echo wscript.echo dateadd("d",-1,date) >tmp.vbs
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo tmp.vbs') do set "y=%%i"&set "m=%%j"&set "d=%%k"
if %m% LSS 10 set "m=0%m%"
if %d% LSS 10 set "d=0%d%"
set "nowdate=%y%-%m%-%d%"
echo 昨天是:%nowdate%
pause
第2个回答  2009-02-09
此种算日期过于死板,而且容易出错不准确.
如果通过调用VBS语句来写更好一点.前后几千天的日期也能求出来.且不会出错.楼主不妨试试.

----------
@echo off
if not "%1"=="" goto a
set "n=-1" //n值为相差的天数,昨天为-1,明天则为+1
mshta vbscript:execute("a=date()%n%:createobject(""wscript.shell"").run """"""%~0 """"""&a")(window.close)&&exit
:a
set "ymd=%1"
set "ymd=%ymd:-=%"
echo 日期为:%ymd%
pause
----------
第3个回答  2009-02-09
第四行改为set dd=%date:~9,2%

估计是你数错了本回答被提问者采纳