使用PowerShell更改.csv文件

时间:2017-09-29 07:46:58

标签: powershell csv

我有这个.csv文件,我试图制作一个改变其中一些内容的PowerShell脚本。

这是文件从头开始的样子:

Start

这是我运行我制作的脚本后的样子(见下文):

After the script

这就是我想要的样子:

How it should look

我制作的脚本如下,我应该更改什么才能使其正常工作?

[IO.File]::ReadAllText("C:\Users\Daniel\Desktop\as2.csv").Replace("[","").Replace("\","").Replace("]","").Replace("Evidence 1","c:").Replace(",","\").Replace("Path,","") |
    Out-File C:\Users\Daniel\Desktop\new.csv -Encoding Ascii –Force
$a = Get-Content c:\Users\Daniel\Desktop\new.csv
$a[2..($a.length - 2)] > c:\Users\Daniel\Desktop\new.csv
Import-Csv c:\Users\Daniel\Desktop\new.csv

3 个答案:

答案 0 :(得分:2)

不要过多地打破更换。您只需将整个序列filter替换为[Evidence 1,,删除C:\,然后替换所有逗号后跟带反斜杠的空格。

]

答案 1 :(得分:0)

对于这些模式,您也可以使用正则表达式。 在下面我使用REGEX的.NET类而不是REGEX函数中的构建(-match)。该脚本如下所示:

$string = "
Path,                                                                  
[Evidence 1],
[Evidence 1, Folder A,],
[Evidence 1, Folder A, AK-472.png ],
[Evidence 1, Folder A, data.lua ],
[Evidence 1, Folder A, glock_19.jpg],
[Evidence 1, Folder A, Nuix 7.2.lnk],
[Evidence 1, Folder A, Nuix Web review.url],
"
# Display string for debugging
$string

$m = ([regex]::Matches($string,'((?<=, ).*(?=]))') | % { $_.groups[0].value } )

foreach($x in $m){
    $folder = [regex]::Matches($x,'(.*(?=,))') | % { $_.groups[0].value }
    $item = [regex]::Matches($x,'((?<=, ).*)') | % { $_.groups[0].value }
    "c:\"+$folder.Trim(' ')+"\"+$item
}

这会给我们以下输出:

c:\Folder A\
c:\Folder A\AK-472.png 
c:\Folder A\data.lua 
c:\Folder A\glock_19.jpg
c:\Folder A\Nuix 7.2.lnk
c:\Folder A\Nuix Web review.url

我所做的只是将我需要的内容放入$ m

所以在这一点上,$ M包含:&#34;文件夹A,AK-472.png&#34;

我接下来要做的是遍历所有项目并使用单个正则表达式(基于第一个)捕获文件夹和项目。

所以

$folder = [regex]::Matches($x,'(.*(?=,))') | % { $_.groups[0].value }

会给我们&#34;文件夹A&#34;

$item = [regex]::Matches($x,'((?<=, ).*)') | % { $_.groups[0].value }

会给我们&#34; AK-472.png&#34;

现在剩下要做的就是创造自己的新路径:

"c:\"+$folder.Trim(' ')+"\"+$item

我修剪空间,否则看起来像:

c:\Folder A \AK-472.png 

答案 2 :(得分:0)

试试这个:

import-csv "c:\temp\as2.csv" -Header Unused, Path, File | where Path -ne '' | 
select @{N="Path";E={"c:\{0}\{1}" -f $_.Path, $_.File.Replace(']', '')}} | Export-Csv "c:\temp\newas2.csv" -NoType