请问,为什么用xp_cmdshell 执行一个批处理不执行?

booksfount 2011-06-22 01:43:14
因为以前用好压,压缩程序文件,利用window的计划任务,每天自动备份到 远程的服务器上。后来windows计划任务出现了故障,就想到了用sql server的作业调度来做。
结果数据库的异地备份批处理,作业调度成功了。但是程序备份的批处理,不成功啊。手工双击这个批处理文件,是可以执行成功的,批处理文件本身没有问题。

作业的脚本如下:

EXECUTE master..xp_cmdshell 'd:\备份\progbak.bat'
看作业的日志,执行成功的,并没有错误提示,但是就是没有copy过去的。


.bat里面的内容如下:

d:\备份\文件1_BussAndClient.lnk
d:\备份\文件2_BussAndClient.lnk
d:\备份\文件3_BussAndClient.lnk
d:\备份\文件4_BussAndClient.lnk

即使在作业中我这样写:
EXECUTE master..xp_cmdshell 'd:\备份\文件1_BussAndClient.lnk'
也是无法执行压缩远程备份的。

谢谢大家,请求大家的帮助,不知道这个是什么原因。同样类似的写法,数据库的异地备份就是可以的。
...全文
379 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
booksfount 2011-06-24
  • 打赏
  • 举报
回复
感激大家的帮助
结贴了。

-晴天 2011-06-23
  • 打赏
  • 举报
回复
c:\abc.bat
的内容应为
c:\abc.txt
-晴天 2011-06-23
  • 打赏
  • 举报
回复
换个方式,在c盘建一个abc.txt,直接
EXECUTE master..xp_cmdshell 'c:\abc.txt'
看能否执行,如果能执行,在c盘上建这个文件的批处理: c:\abc.bat,里面也就是上面这句,
再执行:
EXECUTE master..xp_cmdshell 'c:\abc.bat'
看能否执行.
如能,再把这个批处理建一个快捷方式,直接拉的话,文件名应为: abc.bat.lnk
因为你的快捷方式没有扩展名,把它更名为 abc.lnk
再执行:
EXECUTE master..xp_cmdshell 'c:\abc.lnk'
看是否能执行.
找到错的那步,再看是什么问题.




booksfount 2011-06-23
  • 打赏
  • 举报
回复
to: tcjacky
您好。谢谢您。
不知道如何模拟双机的动作。
我曾经这样写过
master..xp_cmdshell 'cmd/c d:\备份\文件1_BussAndClient.lnk'
也不执行的。

我尝试过,直接在dos粘帖这个命令(d:\备份\文件1_BussAndClient.lnk),回车,是可以执行的 。备份成功。
csmark 2011-06-23
  • 打赏
  • 举报
回复
xp_cmdshell是没有问题的。如果你是用CMD命令进行备份,那就应该用copy。如果你是通过其它软件备份,那你就应该先执行其它软件。
booksfount 2011-06-23
  • 打赏
  • 举报
回复
to: qianjin036a
谢谢您。

执行到第一步就不执行了

EXECUTE master..xp_cmdshell 'c:\abc.txt'

就是这句话。在查询分析器中,执行,提示‘正在执行批查询...’.
txt里面的内容为空,处于等待状态。里面有内容 ‘d:\备份\文件1_BussAndClient.lnk'
也是处于等待。。。 后来就强制终止了。


---------------
第二步,建立了.bat。内容是abc.txt执行。输出如下的错误。
NULL
C:\WINDOWS\system32>abc.txt
'abc.txt' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
NULL



tcjacky 2011-06-22
  • 打赏
  • 举报
回复
你要模拟双击的动作啊 不然你把'd:\备份\文件1_BussAndClient.lnk'
放到cmd中 你看看能否执行
booksfount 2011-06-22
  • 打赏
  • 举报
回复
to: sekai2011
谢谢您
我在查询分析器中 执行,并没有报错,output为null ,消息中显示,所影响行数为1.但是检查异地服务器文件夹,并没有压缩过去。
通过作业调度,也是不报错。
xp_cmdshell 应该是打开了,因为另外一个批处理是成功的。同样是到另外一个机器。
sekai2011 2011-06-22
  • 打赏
  • 举报
回复
EXECUTE master..xp_cmdshell 'd:\备份\文件1_BussAndClient.lnk'
在ssms中直接执行这个看看输出什么错?

是不是xp_cmdshell 没有打开 ?
booksfount 2011-06-22
  • 打赏
  • 举报
回复
数据库备份那个批处理成功了,是有个区别,就是 里面用 xcopy 从一个机器目录复制到另外一个机器。
而程序备份不是用copy来执行的。是这个压缩文件,可以实现压缩并且copy到指定的服务器,是在建立压缩文件的时候设置好的远程服务器的路径密码等。所以,只要这个快捷方式执行就行了。

booksfount 2011-06-22
  • 打赏
  • 举报
回复
to: zy112429
谢谢您。我试验了加了copy还是不行。发现这个.bat 复制到了本机的 C:\WINDOWS\system32 目录了。文件本身没有执行。

to: hexl0325
您好。那个快捷方式,是用压缩软件生成的,可以压缩文件到异地服务器上的某个目录,并且在后面加上时间戳。 快捷方式,是可以正常执行的。
hexl0325 2011-06-22
  • 打赏
  • 举报
回复
怎么是个快捷方式
GoAwayZ 2011-06-22
  • 打赏
  • 举报
回复
EXECUTE master..xp_cmdshell 'copy d:\备份\progbak.bat'

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧