バッチ ファイルを使用して、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 つのスペース文字が追加され、2 番目の FOR ループでは別のスペース文字が追加されるため、結果は次のようになります。
SELECT * FROM people
長い SQL クエリと複数の置換手順でそれを使用しなければならないまで、追加のスペースに対処できました (私の純粋主義者は満足していませんでした!)。ファイルのすべての行に 12 個のスペース文字が追加されていました。追加のスペースは、結果のクエリの長さを約 8300 文字にするのに十分です。これは、バッチ ファイル行に対する Windows の 8196 文字制限には長すぎます。
これらの偽のスペースを削除する方法を誰かが見ることができますか?