[英]Remove Dashes from Row 2 on file
我有一个使用 SQLCMD 调用 SQL 语句的 bat 文件
我的SQL语句没问题
然而,在 header 行下,在第 2 行中,我得到了很多这样的破折号,
SKU,Name,Description
---,----,-----------
123,Apple,Fruit
124,Orange,Fruit
125,Broccoli,Veg
12-9,Grapes,Fruit
13-7,Kiwi,Fruit
示例代码:
"C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\SQLCMD" -S TEST-SQL02 -E -Q "SET nocount ON; select * from fruitveg;" -s "," -W -o "E:\Paddy\Test\test.txt"
应该看起来像:
SKU,Name,Description
123,Apple,Fruit
124,Orange,Fruit
125,Broccoli,Veg
12-9,Grapes,Fruit
13-7,Kiwi,Fruit
我试过包括 -h-1 和 -h -1 但删除了 header 和破折号
另外,我尝试编写 PS 脚本来删除破折号
Get-ChildItem "E:\Paddy\Test\test.txt" | ForEach-Object {Set-Content (Get-Content $_ | Select-Object -Skip 1) -Path $_}
但删除 header 和破折号
每当发生时,我都需要在 SKUS 中保留破折号
我不知道sqlcmd
开关的作用,但假设省略-o "E:\Paddy\Test\test.txt"
会将报告发送到控制台,然后
"C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\SQLCMD" -S TEST-SQL02 -E -Q "SET nocount ON; select * 来自 fruitveg;" -s "," -W |findstr /v /b "-">"E:\Paddy\Test\test.txt"
应该删除那条麻烦的线。
findstr:查找/v
不以/b
以“-”开头但-
需要转义的所有行。
我建议您只需将 SQLCmd.exe 中的 StdOut pipe 直接发送到 FindStr.exe,匹配所有包含任何不是破折号或逗号的字符的行。
"%ProgramFiles%\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\SQLCMD.exe" -S "TEST-SQL02" -E -Q "SET nocount ON; SELECT * FROM fruitveg;" -s "," -W 2>NUL | %SystemRoot%\System32\findstr.exe /R "[^\-,]" 1>"E:\Paddy\Test\test.txt"
这种方法比假设没有想要的行以一个(或多个)破折号开头并从结果中排除这些破折号更稳健。
继续我的评论。
如果您在屏幕上的帖子中向我们展示的内容实际上是这样的:
SKU Name Description
--- ---- -----------
123 Apple. Fruit
124 Orange Fruit
125 Broccoli Veg
因此,如果没有这些逗号,那么这是 PowerShell 中对象数组的默认格式表 output。
但是,如果这是您的 SQL 语句的 output,那么您可以使用 PowerShell 清理文件
(Get-Content -Path "E:\Paddy\Test\test.txt" -Raw) -replace '(?m)^[-,]+\r?\n' |
Set-Content -Path "E:\Paddy\Test\test.txt"
这将删除虚线,为您留下一个可用的 CSV 文件。
PS 为什么Apple
后面有一个点?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.