0

我有一个 bat 文件,我将一些 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"",记录就会列出来,ok。

但是如果我执行这句话"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 回答
0

在进行导入之前,请确保控制台和文件都以您想要的方式编码

复制并粘贴您的 Powershell 窗口中的脚本

 foreach($FileNameInUnicodeOrWhatever in get-childitem)
 {
    $FileName = $FileNameInUnicodeOrWhatever.Name

    $TempFile = "$($FileNameInUnicodeOrWhatever.Name).ASCII"

    get-content $FileNameInUnicodeOrWhatever | out-file $FileNameInUnicodeOrWhatever -Encoding ASCII 

    remove-item $FileNameInUnicodeOrWhatever

    rename-item $TempFile $FileNameInUnicodeOrWhatever

    write-output $FileNameInUnicodeOrWhatever "converted to ASCII ->" $TempFile
}

如果您点击下面的链接,我还将在控制台上设置您的编码

如何将 unicode 文件名批量转换为 Ascii 文件名 windows CMD 或 powershell

于 2017-01-27T08:10:30.310 回答