【发布时间】:2014-01-20 12:22:36
【问题描述】:
我在使用 Powershell 时遇到问题。我需要导入一个 csv 文件,格式化并导出它。
现在其中一个字段在每一行都是相同的值,所以我想将导出文件命名为与单元格值相同。
我正在使用
导入 csv Import-Csv c:\tmp\200114.csv
用
格式化输出 Select-Object @{expression={$_.code}; label='ID NUMBER'} etc etc but one of the fields being DESCRIPTION
然后导出:
Export-Csv -NoTypeInformation c:\tmp\test1.csv
所以基本上我想将文件命名为如下所示,其中 DESCRIPTION 是字段名称,行是 1(因为它们都是相同的):
Export-Csv -NoTypeInformation c:\tmp\@{expression={$_.DESCRIPTION[1]};}.csv
但我只是得到:
Export-Csv:无法验证参数“分隔符”上的参数。参数为空。提供一个非空参数和 tr y 再次执行命令。
理想情况下,我希望文件名是:
今天日期 - 描述列第 1 行值.csv
非常感谢您的任何意见......
样本数据:
ID NUMBER,NAME,ADDRESS 1,ADDRESS 2,CITY,STATE,ZIP,Spare,PHONE #,DESCRIPTION,Spare,Spare,VALUE 1,姓名1,地址1,地址2,城市1,州1,邮编1,,电话1,CC098-1,,,NCV 2,姓名2,地址2,地址3,城市2,州2,邮编2,,电话2,CC098-1,,,NCV
谢谢,对此我非常感激。我正在努力让这个工作。一定是这样的:
Select @{n='ID NUMBER';e={$_.code}}, @{n='DESCRIPTION';e={...}}
我不知道 Select 命令,也找不到任何东西,我什至看不到 n= & e= 等是如何做的。我把它修剪成:
$csv = Import-Csv c:\tmp\200114.csv | Select-Object @{expression={$_.code}; label='ID NUMBER'} | $filename = "$(Get-Date -f 'yyyy-MM-dd') - $($csv[0].DESCRIPTION).csv" | $csv | Export-Csv $filename -NoTypeInformation
但我只是得到错误:
表达式只能作为管道的第一个元素。 在 line:1 char:108
+ $csv = Import-Csv c:\tmp\200114.csv | Select-Object @{expression={$_.code}; label='ID NUMBER'} | $filename <<<< = "$
(Get-Date -f 'yyyy-MM-dd') - $($csv[0].DESCRIPTION).csv" | $csv | Export-Csv $filename -NoTypeInformation
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpressionsMustBeFirstInPipeline
再次感谢。
【问题讨论】:
-
请从 CSV 文件中添加一些示例数据。
-
当然,我必须放入虚拟数据,但标题是正确的:
-
select是Select-Object的别名。创建calculated properties 时,您可以使用@{name=...;expression=...}或@{label=...;expression=...}。name、label和expression可以分别缩写为n、l和e。 -
我认为这是有道理的。谢谢。
标签: powershell