0

一部の CSV ファイルを UTF-8 にエンコードし、そのファイルを SQLite データベースにインポートするバット ファイルがあります。これは私が持っているコードです:

echo Codificando ficheros...
powershell -Command "&{ param($Path); (Get-Content $Path) | Out-File $Path -Encoding UTF8 }" CSVs\\prefijo.csv
powershell -Command "&{ param($Path); (Get-Content $Path) | Out-File $Path -Encoding UTF8 }" CSVs\\materiales.csv
powershell -Command "&{ param($Path); (Get-Content $Path) | Out-File $Path -Encoding UTF8 }" CSVs\\zonas.csv
powershell -Command "&{ param($Path); (Get-Content $Path) | Out-File $Path -Encoding UTF8 }" CSVs\\responsables.csv
powershell -Command "&{ param($Path); (Get-Content $Path) | Out-File $Path -Encoding UTF8 }" CSVs\\lideres.csv
powershell -Command "&{ param($Path); (Get-Content $Path) | Out-File $Path -Encoding UTF8 }" CSVs\\pass.csv
powershell -Command "&{ param($Path); (Get-Content $Path) | Out-File $Path -Encoding UTF8 }" CSVs\\capacidadLotes.csv
powershell -Command "&{ param($Path); (Get-Content $Path) | Out-File $Path -Encoding UTF8 }" CSVs\\boletosIndirectos.csv
@echo OFF
echo Generando fichero de base de datos _datosPrecargados.db...
.\sqlite3.exe BaseDatos\_datosPrecargados.db < Sentencias_sql\Sentencias_DatosPrecargados.sql
@echo OFF
echo Generando fichero de base de datos _inventario.db...
.\sqlite3.exe BaseDatos\_inventario.db < Sentencias_sql\Sentencias_Inventario.sql
pause

ファイルをエンコードするように PowerShell 行を設定する前は、問題なく動作していました。しかし、エンコードする前に問題があります。データベースは問題ないようですが、最初のレコードの最初の列を探して選択文を実行すると、見つかりません。

EG テーブル「ゾーン」:

zone     name
----     ----
Z001     Zone 1
Z002     Zone 2
Z002     Zone 3

文を実行すると、"SELECT * FROM zones"すべてのレコードが一覧表示されます。

文を実行する"SELECT * FROM zones WHERE zone="Z002""と、レコードがリストされます。

しかし、文を実行する"SELECT * FROM zones WHERE zone="Z001""と、レコードが見つかりません。

Bat ファイルに PowerShell の行を設定しないと、問題は発生せず、正常に動作しますが、CSV ファイル内に「ñ」や「ó」などの特殊文字があるため、ファイルをエンコードする必要があります。

何が間違っているのかわかりません。

前もって感謝します!!

4

2 に答える 2

0

ファイル内の文字が以前に破損していた場合、トランスコードでは修正されないため、PowerShell 呼び出しが根本的な問題の解決に役立つ可能性はほとんどありません。代わりにコードページを変更する必要があると思います:

chcp 1251 >nul

このコマンドは、現在のコンソール (つまり、現在のCMDインスタンス) のコードページを指定された値に変更します (ドキュメントを参照してください)。>nul出力を抑制するだけで、スクリプトの残りの部分には重要ではありません。

于 2013-07-17T11:20:24.283 に答える