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

时间:2022-02-03 16:48:21
因为以前用好压,压缩程序文件,利用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'
也是无法执行压缩远程备份的。

谢谢大家,请求大家的帮助,不知道这个是什么原因。同样类似的写法,数据库的异地备份就是可以的。

13 个解决方案

#1


EXECUTE master..xp_cmdshell 'copy d:\备份\progbak.bat'

#2


怎么是个快捷方式

#3


to: zy112429
谢谢您。我试验了加了copy还是不行。发现这个.bat 复制到了本机的  C:\WINDOWS\system32 目录了。文件本身没有执行。

to: hexl0325
您好。那个快捷方式,是用压缩软件生成的,可以压缩文件到异地服务器上的某个目录,并且在后面加上时间戳。 快捷方式,是可以正常执行的。

#4


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

#5


EXECUTE master..xp_cmdshell 'd:\备份\文件1_BussAndClient.lnk'
   在ssms中直接执行这个看看输出什么错?

 是不是xp_cmdshell  没有打开 ?

#6


to: sekai2011
谢谢您
我在查询分析器中 执行,并没有报错,output为null ,消息中显示,所影响行数为1.但是检查异地服务器文件夹,并没有压缩过去。
通过作业调度,也是不报错。
xp_cmdshell  应该是打开了,因为另外一个批处理是成功的。同样是到另外一个机器。

#7


你要模拟双击的动作啊 不然你把'd:\备份\文件1_BussAndClient.lnk'
放到cmd中 你看看能否执行

#8


to: tcjacky
您好。谢谢您。
不知道如何模拟双机的动作。
我曾经这样写过
master..xp_cmdshell 'cmd/c d:\备份\文件1_BussAndClient.lnk'
也不执行的。

我尝试过,直接在dos粘帖这个命令(d:\备份\文件1_BussAndClient.lnk),回车,是可以执行的  。备份成功。  

#9


换个方式,在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'
看是否能执行.
找到错的那步,再看是什么问题.




#10


 c:\abc.bat
的内容应为
c:\abc.txt

#11


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



#12


xp_cmdshell是没有问题的。如果你是用CMD命令进行备份,那就应该用copy。如果你是通过其它软件备份,那你就应该先执行其它软件。

#13


感激大家的帮助
结贴了。

#1


EXECUTE master..xp_cmdshell 'copy d:\备份\progbak.bat'

#2


怎么是个快捷方式

#3


to: zy112429
谢谢您。我试验了加了copy还是不行。发现这个.bat 复制到了本机的  C:\WINDOWS\system32 目录了。文件本身没有执行。

to: hexl0325
您好。那个快捷方式,是用压缩软件生成的,可以压缩文件到异地服务器上的某个目录,并且在后面加上时间戳。 快捷方式,是可以正常执行的。

#4


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

#5


EXECUTE master..xp_cmdshell 'd:\备份\文件1_BussAndClient.lnk'
   在ssms中直接执行这个看看输出什么错?

 是不是xp_cmdshell  没有打开 ?

#6


to: sekai2011
谢谢您
我在查询分析器中 执行,并没有报错,output为null ,消息中显示,所影响行数为1.但是检查异地服务器文件夹,并没有压缩过去。
通过作业调度,也是不报错。
xp_cmdshell  应该是打开了,因为另外一个批处理是成功的。同样是到另外一个机器。

#7


你要模拟双击的动作啊 不然你把'd:\备份\文件1_BussAndClient.lnk'
放到cmd中 你看看能否执行

#8


to: tcjacky
您好。谢谢您。
不知道如何模拟双机的动作。
我曾经这样写过
master..xp_cmdshell 'cmd/c d:\备份\文件1_BussAndClient.lnk'
也不执行的。

我尝试过,直接在dos粘帖这个命令(d:\备份\文件1_BussAndClient.lnk),回车,是可以执行的  。备份成功。  

#9


换个方式,在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'
看是否能执行.
找到错的那步,再看是什么问题.




#10


 c:\abc.bat
的内容应为
c:\abc.txt

#11


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



#12


xp_cmdshell是没有问题的。如果你是用CMD命令进行备份,那就应该用copy。如果你是通过其它软件备份,那你就应该先执行其它软件。

#13


感激大家的帮助
结贴了。