使用exec master..xp_cmdshell写入.html文件

时间:2020-03-14 12:20:35

标签: html sql-server xp-cmdshell

下面是我的小代码:

场景1

declare @DataToWrite varchar(8000)

set @DataToWrite='<html><body><h1>This is a Heading</h1></body></html>'

DECLARE @CommandL1 varchar(8000)

SET @CommandL1 = 'echo'+@DataToWrite+'> D:\logs\Logs\HTMLFile.html'

print CommandL1 

exec master..xp_cmdshell @CommandL1

在下面的SSMS查询窗口中执行它之后,结果是:

SSMS的结果标签:

**< was unexpected at this time.**

SSMS的“消息”标签:

echo<html><body><h1>This is a Heading</h1></body></html>> 
D:\logs\Logs\HTMLFile.html

(2 row(s) affected)

为什么不允许我将此HTML代码写入.html文件?

场景2

以下代码运行正常,并在所需位置生成HTML文件:

declare @DataToWrite varchar(8000)
set @DataToWrite='t'
DECLARE @CommandL1 varchar(8000)

SET @CommandL1 = 'echo '+@DataToWrite+'> D:\logs\Logs\HTMLFile.html'

print @CommandL1 

exec master..xp_cmdshell @CommandL1

注意:

请不要与“这是标题”混淆。 Stackoverflow编辑器正在对其进行转换。

1 个答案:

答案 0 :(得分:2)

有两个问题:

您错过了echo和字符串变量@DataToWrite之间的空格。

没有@

,就不能引用变量
print CommandL1

应该是

print @CommandL1

您还需要转义(使用^)字符串中的特殊字符(标记)以在命令行中将其打印或将其写入文件中。

尝试以下操作:

declare @DataToWrite varchar(8000)
set @DataToWrite='<html><body><h1>This is a Heading</h1></body></html>'
DECLARE @CommandL1 varchar(8000)
SET @CommandL1 = 'echo '+REPLACE(REPLACE(@DataToWrite, '<', '^<'), '>', '^>')+' > D:\logs\Logs\HTMLFile.html'
print @CommandL1 
exec master..xp_cmdshell @CommandL1
相关问题