Записать в. html файл с exe c master..xp_cmdshell - PullRequest
0 голосов
/ 14 марта 2020

Ниже приведен мой маленький код:

Сценарий 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 CODE TO. 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 Ответ

1 голос
/ 14 марта 2020

есть две проблемы:

Вы пропустили пробел между 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
...