中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » 在批处理中引用变量出现的问题,请大家出出主意!
作者:
标题: 在批处理中引用变量出现的问题,请大家出出主意! 上一主题 | 下一主题
remuzi
新手上路





积分 6
发帖 1
注册 2006-1-6
状态 离线
『楼 主』:  在批处理中引用变量出现的问题,请大家出出主意!

我用每天的日期做文件名来备份数据库,但LOG文件不可用变量,不知是什么原因,代码如下,请高手指点:
@echo off
date/t | exp test/test@emis owner=test file=f:\%1.dmp log=f:\%1.log
if errorlevel = 0 (exit) else (start err.exe)
这样会出错误,但在改了.log文件名固定的后,如:log=f:\exp.log,就不会有问题,但我想每天生成一个数据库文件和LOG文件,这样我在恢复某天的数据时就可以查到当天的数据库是否有问题。而且errorlevel检查不到是否出错,都是直接退出的。

2006-1-6 19:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 2 楼』:  

Re remuzi:

      你的代码由如下问题:

      1、 f:\%1.dmp 与 f:\%1.log ,%1 意味着引用调用批处理的命令行的第一个参数,而它很可能为空,这样上面的引用就成了 f:\.dmp 和 f:\.log ,当然是很可能出错的。

      而从实际代码来看,你试图利用 date/t 从管道中获取日期,这样是比较困难的,因为 DOS 或者 Windows 命令行不会将管道中的信息传送给 exp 的命令行,而会直接传送到的它的输入端。

      在这里,如果要在文件名中使用日期一般通过环境变量来实现。在 NT
系列的 cmd 中,直接引用 %date% 变量便可得到日期,还可通过 %date:~0,10% 等形式对日期内容进行修剪。在DOS或9x的command中,需要先通过date或者prompt将日期值设置到环境变量中再行引用,细节在 [分享]批处理编程的异类(http://www.cn-dos.net/forum/viewthread.php?tid=8905) 可以找到,不再详述。

      2、errorlevel检查不到是否出错,是你的用法有误。在DOS或者命令行中的命令语法,if errorlevel 对后面的数值判断是大于等于,而非等于,即使你在 errrorlevel 后使用了 = 或者 == 。对于此种情况,你可以使用 if  %errorlevel% EQU 1 (exit) else (start err.exe) 。或者在 DOS/Win9x 下,可以使用:

if not errorlevel 1 exit
start err.exe



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-1-7 10:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: