繁体   English   中英

从文件的第 2 行中删除破折号

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM