0

Below is my small code:

Scenario 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

After executing it in the SSMS Query Window below are results:

Results Tab of SSMS:

**< was unexpected at this time.**

Messages Tab of SSMS:

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

(2 row(s) affected)

Why it is not allowing me to write this HTML CODE TO .html file ?

Scenario 2

Below code runs fine and generates the HTML file in the desired location:

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

Note:

Please don't get confused with "This Is a Heading" thing. Stackoverflow editor is converting it.

B. Go
  • 1,436
  • 4
  • 15
  • 22

1 Answers1

2

there are two issues:

You have missed space between echo and the string variable @DataToWrite.

You can't refer to a variable without @

print CommandL1

it should be

print @CommandL1

You also need to escape (using ^) special characters (tags) in your string to print them in the command line or write those into a file.

try the following:

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
sacse
  • 3,634
  • 2
  • 15
  • 24