sql-server - 如何从 PowerShell 中的对象中删除 NULL 字符 (0x00)

标签 sql-server powershell bcp

我有一个 .CSV 文件,该文件是使用 SQL Server 的 BCP 命令行 BULK-COPY 实用程序创建的,用于转储一堆数据库表。

由于我想使用 Powershell 导入这些 .CSV 文件并使用 format-table cmdlet 将它们转换为漂亮的报告,因此我遇到了列排列等问题。因为某些列包含来自 SQL Server 的 NULL。我没有选择首先从 SQL Server 转换 NULL;由于我将表导出为 CSV 的方式。

因此,我想先从 .CSV 文件中删除所有 NULL,然后再尝试将其通过管道传输到格式表 cmdlet。

我的基本代码如下:

$CSV=import-csv "c:\temp\tablename.csv"
$CSV | format-table -autosize | out-string -width 4096 >"C:\TEMP\tablename.txt"

我尝试过这样做:

$CSV | -replace($null,"") | format-table -autosize | out-string -width 4096 > "C:\TEMP\tablename.txt"

但我仍然得到 NULL。

有谁知道如何从我的 CSV 中删除 NULL,以便我可以显示一个漂亮的表格报告。我想将这些 .TXT 报告导入 SVN,但 NULL 会给我带来问题,而且它会扭曲报告。

十六进制编辑器中显示的 CSV 文件:

00000EA0h: 31 38 39 2C 31 31 39 2C 37 35 29 2C 77 68 69 74 189,119,75),whit  
00000EB0h: 65 2C 77 68 69 74 65 2C 2C 2C 2C 2C 2C 2C 2C 2C e,white,,,,,,,,,  
00000EC0h: 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C ,,,,,,,,,,,,,,,,  
00000ED0h: 2C 2C 0D 0A 61 63 62 34 33 5F 30 31 2C 4F 4E 2C ,,..acb43_01,ON,  
00000EE0h: 00 2C 32 37 2C 39 39 2C 2F 61 63 62 34 33 5F 30 .,27,99,/acb43_0  
00000EF0h: 31 2F 34 33 62 61 6C 61 6E 63 65 73 2E 67 69 66 1/43balances.gif  

注意 EE0h 处的第一个字符是 NULL,0x00。

最佳答案

经过一番尝试后,我终于发现这个语法是有效的:

(Get-Content "C:\temp\tablename.csv") -replace "`0", "" | Set-Content "C:\temp\tablename.csv"

关于sql-server - 如何从 PowerShell 中的对象中删除 NULL 字符 (0x00),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9863455/

相关文章:

c# - 从 C# 的 PowerShell 当前状态(或上下文)获取信息

Powershell - 如何检查具有所需创建时间的文件是否存在?

java - 使用 Runtime.exec() 未完全执行 BAT 文件

sql-server - 我如何遍历每个记录并查看是否缺少 3 个要求中的任何一个?

sql-server - 重命名 SQL Server 主机后更新 sys.servers

sql-server - Oracle 删除约束级联等效于 Sql Server

sql - 切换到在 bcp 中包含列标题

c# - SQL CPU 高 - SqlConnection 未关闭 - 相关?

html - 如何使用 powershell 将 HTML 表转换为具有相同结构的 CSV 文件

sql - 将 sql 结果导出到 CSV 时如何在单个单元格中使用逗号分隔值