中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]批处理运行显示命令语法不正确
作者:
标题: [已结]批处理运行显示命令语法不正确 上一主题 | 下一主题
yuehong
初级用户





积分 64
发帖 37
注册 2007-3-14
状态 离线
『楼 主』:  [已结]批处理运行显示命令语法不正确

http://www.cn-dos.net/forum/viewthread.php?tid=16676

22楼

显示命令语法不正确。使用环境win2000。请高手帮忙解决。谢谢。


原bat内容如下:
:: DateDel2.bat - 删除指定路径下指定日数以前修改的文件
:: Will Sort - 2005-9-2 - CMD@WinXP
:: 注意事项:参数%1指定日数,昨天为1,前天为2,依次类推
::           参数%1指定文件路径,省略时将处理当前路径
:: 核心算法:Ritchie Lawrence, updated 2002-08-13. Version 1.1
::
@echo off & setlocal ENABLEEXTENSIONS
call :Date2Day %date:~0,10% sdays
set /a sdays-=%1
call :Day2Date %sdays% difdate
echo 将删除 %cd% 下 %difdate% 前的修改的以下文件:
for /r %2 %%f in (*.*) do if "%%~tf" LEQ "%difdate%" echo "%%f"
goto :EOF

:Date2Day
setlocal ENABLEEXTENSIONS
for /f "tokens=1-3 delims=/-, " %%a in ('echo/%1') do (
  set yy=%%a & set mm=%%b & set dd=%%c
)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
endlocal&set %2=%j%&goto :EOF

:Day2Date
setlocal ENABLEEXTENSIONS
set /a i=%1,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
endlocal&set %2=%yy%-%mm%-%dd%&goto :EOF
[ Last edited by HAT on 2008-10-21 at 21:08 ]

2008-10-16 09:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  

代码保存为test.bat
双击运行
结果贴出来看看
setlocal ENABLEEXTENSIONS
call :Date2Day %date:~0,10% sdays
set /a sdays-=%1
call :Day2Date %sdays% difdate
echo 将删除 %cd% 下 %difdate% 前的修改的以下文件:
for /r %2 %%f in (*.*) do if "%%~tf" LEQ "%difdate%" echo "%%f"
pause
goto :EOF

:Date2Day
setlocal ENABLEEXTENSIONS
for /f "tokens=1-3 delims=/-, " %%a in ('echo/%1') do (
  set yy=%%a & set mm=%%b & set dd=%%c
)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
endlocal&set %2=%j%&goto :EOF

:Day2Date
setlocal ENABLEEXTENSIONS
set /a i=%1,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
endlocal&set %2=%yy%-%mm%-%dd%&goto :EOF




2008-10-16 09:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yuehong
初级用户





积分 64
发帖 37
注册 2007-3-14
状态 离线
『第 3 楼』:  

D:\t>test

D:\t>setlocal ENABLEEXTENSIONS

D:\t>call :Date2Day 星期四 2008-1 sdays

D:\t>setlocal ENABLEEXTENSIONS

D:\t>for /F "tokens=1-3 delims=/-, " %a in ('echo/星期四') do (set yy=%a   & set
mm=%b   & set dd=%c  )

D:\t>(set yy=星   & set mm=   & set dd=  )

D:\t>set /a dd=100 %100,mm=100 %100

D:\t>set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2

D:\t>set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633

D:\t>endlocal & set 2008-1=-719560  & goto :EOF

D:\t>set /a sdays-=
找不到操作数。

D:\t>call :Day2Date  difdate

D:\t>setlocal ENABLEEXTENSIONS

D:\t>set /a i=difdate,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a

D:\t>set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5


D:\t>set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10

D:\t>(if 1 LSS 10 set mm=01 )  & (if 1 LSS 10 set dd=01 )

D:\t>endlocal & set =1970-01-01  & goto :EOF :: DateDel2.cmd - 删除指定路径下指
定日数以前修改的文件
命令语法不正确。

D:\t>echo 将删除 D:\t 下  前的修改的以下文件:
将删除 D:\t 下  前的修改的以下文件:

D:\t>for /R %f in (*.*) do if "%~tf" LEQ "" echo "%f"

D:\t>if "08-09-03 17:27 " LEQ "" echo "D:\t\rarreg.key"

D:\t>if "08-10-16 09:41 " LEQ "" echo "D:\t\test.bat"

D:\t>pause
请按任意键继续 . . .

2008-10-16 10:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 4 楼』:  Re 3楼

还不明白原因?

参考:批处理标准化获取当前系统日期
http://www.cn-dos.net/forum/viewthread.php?tid=41857



2008-10-16 10:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yuehong
初级用户





积分 64
发帖 37
注册 2007-3-14
状态 离线
『第 5 楼』:  

C:\Documents and Settings\Adminis
当前日期: 2008-10-16 星期四

我们这里统一的日期格式就是这样,不知道怎么操作?
我是dos菜鸟,希望版主能给个完整的解决方案,谢谢

2008-10-16 19:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yuehong
初级用户





积分 64
发帖 37
注册 2007-3-14
状态 离线
『第 6 楼』:  

希望那位高手给个完整的代码。我是dos新手。急用。再次求助!!!!
很多xp系统以上能用的简单实用的命令在2000下都不能用。没办法求助各位了。。。
希望hat老大和各位高手看后能帮帮忙

2000 下的时间格式是

当前日期: 2008-10-20 星期一

2008-10-20 23:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 7 楼』:  Re 6楼


@echo off
rem 演示:删除指定路径下指定天数以前修改的文件
rem 如果演示结果无误,把del前面的echo去掉,即可实现真正删除
setlocal enabledelayedexpansion
rem 指定待删除文件的存放路径
set SrcDir=C:\Test
rem 指定天数
set DayAgo=1
>"%temp%\MyDate.vbs" echo LastDate=date()-%DayAgo%
>>"%temp%\MyDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
>>"%temp%\MyDate.vbs" echo wscript.echo FmtDate
for /f %%a in ('cscript /nologo "%temp%\MyDate.vbs"') do (
  set DateFlag=%%a
)
set DateFlag=%DateFlag:~0,4%-%DateFlag:~4,2%-%DateFlag:~6,2%
rem set DateFlag=%DateFlag:~4,2%/%DateFlag:~6,2%-%DateFlag:~0,4%
for /r "%SrcDir%" %%a in (*.*) do (
  if "%%~ta" leq "%DateFlag%" (
    echo del /f /q "%%a"
  )
)
pause




2008-10-21 09:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yuehong
初级用户





积分 64
发帖 37
注册 2007-3-14
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by HAT at 2008-10-21 09:59 AM:
[code]@echo off
rem 演示:删除指定路径下指定天数以前修改的文件
rem 如果演示结果无误,把del前面的echo去掉,即可实现真正删除
setlocal enabledelayedexpa ...

还是不行,会把所有的文件都删除。。。并没有按照指定日期去删除。。。

HAT老大怎么搞?

2008-10-21 13:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 9 楼』:  Re 8楼

代码保存为test.bat
双击运行
结果贴出来看看
rem 演示:删除指定路径下指定天数以前修改的文件
rem 如果演示结果无误,把del前面的echo去掉,即可实现真正删除
setlocal enabledelayedexpansion
rem 指定待删除文件的存放路径
set SrcDir=C:\Test
rem 指定天数
set DayAgo=1
>"%temp%\MyDate.vbs" echo LastDate=date()-%DayAgo%
>>"%temp%\MyDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
>>"%temp%\MyDate.vbs" echo wscript.echo FmtDate
for /f %%a in ('cscript /nologo "%temp%\MyDate.vbs"') do (
  set DateFlag=%%a
)
set DateFlag=%DateFlag:~0,4%-%DateFlag:~4,2%-%DateFlag:~6,2%
rem set DateFlag=%DateFlag:~4,2%/%DateFlag:~6,2%-%DateFlag:~0,4%
for /r "%SrcDir%" %%a in (*.*) do (
  echo [%%~ta] [%DateFlag%]
  if "%%~ta" leq "%DateFlag%" (
    echo del /f /q "%%a"
  )
)
pause




2008-10-21 15:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yuehong
初级用户





积分 64
发帖 37
注册 2007-3-14
状态 离线
『第 10 楼』:  

出现:


E:\>rem 演示:删除指定路径下指定天数以前修改的文件

E:\>rem 如果演示结果无误,把del前面的echo去掉,即可实现真正删除

E:\>setlocal enabledelayedexpansion

E:\>rem 指定待删除文件的存放路径

E:\>set SrcDir=C:\Test

E:\>rem 指定天数

E:\>set DayAgo=1

E:\>echo LastDate=date()-1 1>"C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\MyDate.vbs"

E:\>echo FmtDate=right(year(LastDate),4) & right("0" & month(LastDate),2) & righ
t("0" & day(LastDate),2) 1>>"C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\MyDate.vbs"

E:\>echo wscript.echo FmtDate 1>>"C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\MyDate.vbs"


E:\>for /F %a in ('cscript /nologo "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\MyDate.vb
s"') do (set DateFlag=%a )

E:\>(set DateFlag=20081020 )

E:\>set DateFlag=2008-10-20

E:\>rem set DateFlag=-1/0--2008

E:\>for /R "C:\Test" %a in (*.*) do (
echo [%~ta] [2008-10-20]
if "%~ta" LEQ "2008-10-20" (echo del /f /q "%a" )
)

E:\>(
echo [08-10-10 00:49 ] [2008-10-20]
if "08-10-10 00:49 " LEQ "2008-10-20" (echo del /f /q "C:\Test\PDF.Creator.Plus
.v4.0.0.8_Crack.rar" )
)
[08-10-10 00:49 ] [2008-10-20]
del /f /q "C:\Test\PDF.Creator.Plus.v4.0.0.8_Crack.rar"

E:\>(
echo [08-10-10 00:48 ] [2008-10-20]
if "08-10-10 00:48 " LEQ "2008-10-20" (echo del /f /q "C:\Test\Quick-PDF.PDF.To
.Word.Converter.v1.0-Crack.rar" )
)
[08-10-10 00:48 ] [2008-10-20]
del /f /q "C:\Test\Quick-PDF.PDF.To.Word.Converter.v1.0-Crack.rar"

E:\>(
echo [08-10-10 00:48 ] [2008-10-20]
if "08-10-10 00:48 " LEQ "2008-10-20" (echo del /f /q "C:\Test\Quick-PDF.PDF.To
.Word.Converter.v1.0.rar" )
)
[08-10-10 00:48 ] [2008-10-20]
del /f /q "C:\Test\Quick-PDF.PDF.To.Word.Converter.v1.0.rar"

E:\>(
echo [08-10-16 07:41 ] [2008-10-20]
if "08-10-16 07:41 " LEQ "2008-10-20" (echo del /f /q "C:\Test\RTX.v3.x.Keymake
r.zip" )
)
[08-10-16 07:41 ] [2008-10-20]
del /f /q "C:\Test\RTX.v3.x.Keymaker.zip"

E:\>(
echo [08-10-10 01:43 ] [2008-10-20]
if "08-10-10 01:43 " LEQ "2008-10-20" (echo del /f /q "C:\Test\Solid.Converter.
PDF.v4.0.560.Multilingual.Keygen.and.Patch-BRD.rar" )
)
[08-10-10 01:43 ] [2008-10-20]
del /f /q "C:\Test\Solid.Converter.PDF.v4.0.560.Multilingual.Keygen.and.Patch-BR
D.rar"

E:\>pause
请按任意键继续 . . .

[ Last edited by yuehong on 2008-10-21 at 18:45 ]

2008-10-21 18:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 11 楼』:  

我说了很多次让你把dir /tc的结果贴出来,不知为何你一直不肯。
如果早点贴出来的话,也不必浪费这么多时间了^_^
@echo off
rem 演示:删除指定路径下指定天数以前修改的文件
rem 如果演示结果无误,把del前面的echo去掉,即可实现真正删除
setlocal enabledelayedexpansion
rem 指定待删除文件的存放路径
set SrcDir=C:\Test
rem 指定天数
set DayAgo=1
>"%temp%\MyDate.vbs" echo LastDate=date()-%DayAgo%
>>"%temp%\MyDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
>>"%temp%\MyDate.vbs" echo wscript.echo FmtDate
for /f %%a in ('cscript /nologo "%temp%\MyDate.vbs"') do (
  set DateFlag=%%a
)
set DateFlag=%DateFlag:~0,4%-%DateFlag:~4,2%-%DateFlag:~6,2%
rem set DateFlag=%DateFlag:~4,2%/%DateFlag:~6,2%-%DateFlag:~0,4%
for /r "%SrcDir%" %%a in (*.*) do (
  if "20%%~ta" leq "%DateFlag% 9" (
    echo del /f /q "%%a"
  )
)
pause
[ Last edited by HAT on 2008-10-21 at 19:38 ]



2008-10-21 19:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yuehong
初级用户





积分 64
发帖 37
注册 2007-3-14
状态 离线
『第 12 楼』:  

测试成功,谢谢HAT的耐心指点!

2008-10-21 21:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: