我正在尝试使用批处理文件将包含 sql 代码的文件转换为单个环境变量,以便与 MSSQL 实用程序 bcp 一起使用。例如,如果 InFile.sql 包含
-- 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
但是,第一个 FOR 循环在每行末尾添加 3 个空格字符,第二个 FOR 循环添加另一个空格字符,因此结果是
SELECT * FROM people
我可以应付额外的空格(尽管我内心的纯粹主义者并不高兴!)直到我不得不将它与长 SQL 查询和多个替换步骤一起使用 - 文件中的每一行都添加了 12 个空格字符。额外的空格足以使生成的查询长约 8300 个字符 - 对于 Windows 的批处理文件行的 8196 个字符限制来说太多了。
谁能看到我如何删除这些虚假空间?