我正在尝试使用批处理文件将包含sql代码的文件转换为与MSSQL实用程序bcp一起使用的单个环境变量。 例如,如果InFile.sql包含For循环的输出中的虚假空间
-- This is a simple statement
SELECT *
FROM table
的ECHO %query%
输出应该是 SELECT * FROM people
下面的代码对我的作品大部分时间
SETLOCAL=ENABLEDELAYEDEXPANSION
:: Replace VarOld with VarNew
FOR /f "delims=" %%a IN ('TYPE InFile.sql') DO (SET line=%%a & ECHO !line:table=people! >> TmpFile1)
:: Remove comment lines starting with '-' and remove newline characters
(FOR /f "eol=- delims=" %%a in (TmpFile1) DO SET/p=%%a) <nul >TmpFile2
:: Create variable 'Query'
FOR /f "delims=" %%a IN ('TYPE TmpFile2') DO SET query=%%a
然而,第一部分为循环在每行的末尾添加3个空格字符,第二个FOR循环添加另一个空格字符,因此结果为 SELECT * FROM people
我可以应付额外的空间(尽管纯粹主义者并不开心!),直到我不得不使用它与一个长的SQL查询和多个替换步骤 - 文件中的每一行都添加了12个空格字符。额外的空间足以使查询结果大约8300个字符长 - 对于批处理文件行的Windows 8196字符限制来说太多了。
任何人都可以看到我可以如何删除这些虚假空间吗?