下面是我的小代码:
场景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编辑器正在对其进行转换。
答案 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