当我如下调用xp_cmdshell时,7z.exe
实际运行,并且其输出正确,因为没有包含任何参数:
declare @Command VARCHAR(1000)
set @Command = '"C:\Program Files\7-Zip\7z.exe" a '
exec master..xp_cmdshell @command
select @Command
输出:
output
NULL
7-Zip 18.05 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2018-04-30
NULL
NULL
NULL
Command Line Error:
Cannot find archive name
NULL
添加文件后,出现完全不同的错误:找不到7z.exe
:
declare @Command VARCHAR(1000)
set @Command = '"C:\Program Files\7-Zip\7z.exe" a ' + '"' + 'C:\TO_ERASE\ToZip.txt' + '"'
exec master..xp_cmdshell @command
select @Command
输出:
output
'C:\Program' is not recognized as an internal or external command,
operable program or batch file.
NULL
问题是什么?
唯一的区别是我添加了文件名作为参数。我会理解7z.exe
是否生成了错误,但是Windows没有找到exe
文件。
答案 0 :(得分:1)
有趣的问题。我四处寻找有关文件名空间的各种解决方案,并遇到了 THIS 。我不确定为什么你的第一个例子有效,但他们的解决方案是在路径之前添加一些东西,这样路径就不是命令中的第一个东西了。
declare @Command VARCHAR(1000)
set @Command = 'cd.. && "C:\Program Files\7-Zip\7z.exe" a ' + '"' + 'C:\TO_ERASE\ToZip.txt' + '"'
exec master..xp_cmdshell @command
select @Command