Powershell 需要windows脚本从csv文件中删除特定列
我有一个CSV文件(下面提供的格式),分隔符设置为Powershell 需要windows脚本从csv文件中删除特定列,powershell,csv,batch-file,delimiter,windows-scripting,cmd,Powershell,Csv,Batch File,Delimiter,Windows Scripting,Cmd,我有一个CSV文件(下面提供的格式),分隔符设置为,。 作为输出,我们希望从下面的CSV中删除第4列(值) 我们只需要在WINDOWS批处理脚本中使用它,因为服务器上不允许其他脚本设置。服务器也有powershell,但我们不确定如何利用powershell命令来达到以下目的 CSV如下所示: ID, NAME, SR, Values, Status "1", "Raj", "123", "A,B,C,D,E", "False" "2", "Rahul", "456", "C", "
,
。
作为输出,我们希望从下面的CSV中删除第4列(值)
我们只需要在WINDOWS批处理脚本中使用它,因为服务器上不允许其他脚本设置。服务器也有powershell,但我们不确定如何利用powershell命令来达到以下目的
CSV如下所示:
ID, NAME, SR, Values, Status
"1", "Raj", "123", "A,B,C,D,E", "False"
"2", "Rahul", "456", "C", "False"
ID, NAME, SR, Values, Status
"1", "Raj", "123", "A,B,C,D,E", "False"
"2", "Rahul", "456", "C", "False"
ipcsv test.csv | select ID,NAME,SR,Values | export-csv test2.csv -NTI
"ID","NAME","SR","Values"
"1","Raj","123","A,B,C,D,E"
"2","Rahul","456","C"
我们尝试了此方法,但效果不理想:
(Get-Content .\testCSV.csv) | Foreach-Object { $_.split()[4] -join ' ' } | Out-File .\file.txt
预期结果(删除“值”列)
与其尝试将CSV作为平面文本进行破解和刮取,不如将其对象化,然后选择要保留的属性 test.csv:
ID, NAME, SR, Values, Status
"1", "Raj", "123", "A,B,C,D,E", "False"
"2", "Rahul", "456", "C", "False"
ID, NAME, SR, Values, Status
"1", "Raj", "123", "A,B,C,D,E", "False"
"2", "Rahul", "456", "C", "False"
ipcsv test.csv | select ID,NAME,SR,Values | export-csv test2.csv -NTI
"ID","NAME","SR","Values"
"1","Raj","123","A,B,C,D,E"
"2","Rahul","456","C"
test.ps1:
ID, NAME, SR, Values, Status
"1", "Raj", "123", "A,B,C,D,E", "False"
"2", "Rahul", "456", "C", "False"
ID, NAME, SR, Values, Status
"1", "Raj", "123", "A,B,C,D,E", "False"
"2", "Rahul", "456", "C", "False"
ipcsv test.csv | select ID,NAME,SR,Values | export-csv test2.csv -NTI
"ID","NAME","SR","Values"
"1","Raj","123","A,B,C,D,E"
"2","Rahul","456","C"
结果:
ID, NAME, SR, Values, Status
"1", "Raj", "123", "A,B,C,D,E", "False"
"2", "Rahul", "456", "C", "False"
ID, NAME, SR, Values, Status
"1", "Raj", "123", "A,B,C,D,E", "False"
"2", "Rahul", "456", "C", "False"
ipcsv test.csv | select ID,NAME,SR,Values | export-csv test2.csv -NTI
"ID","NAME","SR","Values"
"1","Raj","123","A,B,C,D,E"
"2","Rahul","456","C"
如果您的CSV源来自管道而不是文件,请改用。如果您使用内置的CSV功能导入CSV,您可以使用
选择对象的-ExcludeProperty
排除属性/列
从提示符或脚本:
导入CSV。\testCSV.CSV |选择对象*-排除属性值|导出CSV。\Modified.CSV-NoTypeInformation
来自或来自:
PowerShell-NoP“IpCSV.\testCSV.csv |选择*-Exc值| EpCSV.\Modified.csv-不”
@ECHO OFF
SETLOCAL
设置“sourcedir=U:\sourcedir”
设置“destdir=U:\destdir”
设置“filename1=%sourcedir%\q56003792.txt”
设置“outfile=%destdir%\outfile.txt”
(
对于/f“usebackqdelims=“%a IN”(“%filename1%”)中的DO CALL:drop4%%a
)>“%outfile%”
后藤:EOF
:下降4
::将所有数据发送到“行”
设置“行=%*”
调用ECHO%%行:**%1、%2、%3、%4、=%1、%2、%3、%
后藤:eof
您需要更改sourcedir
和destdir
的设置以适应您的环境
我使用了一个名为q56003792.txt
的文件,其中包含用于测试的数据
生成定义为%outfile%的文件
之所以需要使用usebackq
选项,是因为我选择在源代码周围添加引号
文件名
由于所有数据行都包含由分隔的列,
我建议使用这种纯批处理解决方案
序言确定了要使用的目录和文件名。这些是为我的系统定制的
该例程的主要部分是for/f的for
,它调用子例程drop4
,逐字提供每个完整的文本行。
的用括号括起来,用于将整个例程输出重定向到指定的文件
子例程只是将参数分配给标准环境变量(因为批处理子字符串只能应用于普通变量)
call echo
行在替换了提供的参数%1..%4后执行echo
,因此字符串echo
ed将是原始行,所有字符最多为[前4个参数,由分隔,
]替换为[前3个参数,由分隔,
]-删除第4列。首先,澄清您需要什么——如果您在尝试编写PowerShell代码时需要帮助,请提供一个(因为“它未按预期工作”不是错误描述,因此请详细说明)并应用相关标记。如果你需要一个免费的批处理文件,那么,你在这里完全错了,因为这个网站不是一个免费的脚本服务;因此,采取行动和咨询!如果您尝试了批处理文件和PowerShell方法,请使用每种编码语言发布一个特定问题!-NoTypeInformation
的别名是-NTI
,根据。也是,1。与我自己的答案相比,我更喜欢你的-ExcludeProperty
解决方案。我知道别名@rojo,虽然我对NoTypeInformation
的缩短目前会受到参数未来变化的影响,但我更喜欢在键入时使用它。如果OP需要,我非常满意他们用NTI
替换NoT
,正如您所评论的。