标题: 在批处理中引用变量出现的问题,请大家出出主意!
[打印本页]
作者: remuzi
时间: 2006-1-6 19:03
标题: 在批处理中引用变量出现的问题,请大家出出主意!
我用每天的日期做文件名来备份数据库,但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检查不到是否出错,都是直接退出的。
作者: willsort
时间: 2006-1-7 10:00
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