我有一个包含两列多行的csv文件,其中包含具有文件夹位置及其相应大小的文件的信息,如下所示
"Folder_Path","Size"
"C:\MSSQL\DATA\UsersData\FTP.txt","21345"
"C:\MSSQL\DATA\UsersData\Norman\abc.csv","78956"
"C:\MSSQL\DATA\UsersData\Market_Database\123.bak","1234456"
我想做的是从csv的每一行中删除“ C:\ MSSQL \ DATA \”部分,并从UsersData和所有其他数据开始之后保留其余的文件夹路径,因为此信息是重复的。所以我的csv应该在下面这样。
"Folder_Path","Size"
"UsersData\FTP.txt","21345"
"UsersData\Norman\abc.csv","78956"
"UsersData\Market_Database\123.bak","1234456"
我正在运行的内容如下
Import-Csv ".\abc.csv" |
Select-Object -Property @{n='Folder_Path';e={$_.'Folder_Path'.Split('C:\MSSQL\DATA\*')[0]}}, * |
Export-Csv '.\output.csv' -NTI
感谢您的帮助!
答案 0 :(得分:1)
看起来像是简单的string replace的工作:
Get-Content "abc.csv" | foreach { $_.replace("C:\MSSQL\DATA\", "") | Set-Content "output.csv"
或:
[System.IO.File]::WriteAllText("output.csv", [System.IO.File]::ReadAllText("abc.csv" ).Replace("C:\MSSQL\DATA\", ""))
答案 1 :(得分:0)
这应该有效:
Import-Csv ".\abc.csv" |
Select-Object -Property @{n='Folder_Path';e={$_.'Folder_Path' -replace '^.*\\(.*\\.*)$', '$1'}}, Size |
Export-Csv '.\output.csv' -NoTypeInformation