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

Write to .html file with exec master..xp_cmdshell

下面是我的小代码:

场景一

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 查询中执行后 Window 结果如下:

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 文件?

场景二

下面的代码运行良好并在所需位置生成 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

注:

请不要与 "This Is a Heading" 混淆。 Whosebug 编辑器正在转换它。

有两个问题:

您在 echo 和字符串变量 @DataToWrite 之间遗漏了 space。

你不能引用没有@

的变量
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