У меня есть пакетный скрипт, который делает вызов с sqlcmd, чтобы вытянуть результаты оператора SELECT в файл с именем temp.txt. В данных есть некоторые иностранные символы, которые требуют от нас использования Unicode, поэтому temp.txt - это Unicode (кодовая страница 65001).
Когда данные находятся в файле temp.txt, скрипт подсчитывает количество строк и добавляет некоторые заголовки. Для этого необходимо создать новый файл (назовем его newfile.txt), добавить заголовки и количество строк, а затем скопировать в каждую строку из temp.txt в newfile.txt.
Все это работает нормально, за исключением того, что в первой строке, скопированной из temp.txt, есть метка порядка байтов в Юникоде; это означает, что первая строка вместо того, чтобы выглядеть так:
1, Custom Page
выглядит так:
1, Custom Page
Я не могу понять это лучший способ справиться с этим.
Если бы я мог сказать sqlcmd дать мне Юникод без спецификации, это было бы прекрасно - попробовал поискать в гугле, не смог бы разобраться.
Если бы я мог выяснить, как написать цикл FOR для пакетного файла, который удаляет первые три символа только первой строки при копировании в temp.txt, я бы попробовал это, но после некоторого поиска в Google и эксперименты я разочарован там.
Для записи соответствующий код выглядит так:
::%1 = sql file to call; %2 = filename to be created; %3 = header for file; %4 = data type row for file
sqlcmd -I -f 65001 -W -k 1 -h -1 -s "," -S servername -d dbname -i %1 -o temp.txt
set counter=0
for /f %%a in (temp.txt) do set /a counter+=1
echo ^^!total rows=%counter% >> %2
echo !str1! >> %2
echo !str2! >> %2
for /F "delims=¶" %%i in (temp.txt) do ( echo %%i >> %2 )
Пожалуйста, помогите мне, я схожу с ума по этой нелепой маленькой проблеме.