我有这个.csv文件,我试图制作一个改变其中一些内容的PowerShell脚本。
这是文件从头开始的样子:
这是我运行我制作的脚本后的样子(见下文):
这就是我想要的样子:
我制作的脚本如下,我应该更改什么才能使其正常工作?
[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
答案 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