【问题标题】:Write to .html file with exec master..xp_cmdshell使用 exec master..xp_cmdshell 写入 .html 文件
【发布时间】:2020-03-14 12:20:35
【问题描述】:

下面是我的小代码:

场景 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 编辑器正在转换它。

【问题讨论】:

标签: html sql-server xp-cmdshell


【解决方案1】:

有两个问题:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    相关资源
    最近更新 更多