CSV中字符串文件路径末尾的反斜杠停止替换

时间:2019-01-21 15:18:45

标签: powershell

我有一个包含完整文件路径列表的CSV文件。看起来像这样:

C:\Folder1\Subfolder1\file1.txt
C:\Folder1\Subfolder2\file2.txt
C:\Folder1\Subfolder3\file3.txt

我想做的是从字符串中删除“ C:\ Folder1 \”,这样我只剩下:

Subfolder1\file1.txt
Subfolder2\file2.txt
Subfolder3\file3.txt

我想出了以下脚本:

(Get-Content c:\test.csv) | % {$_.Replace('C:\\Folder1\\','')}

运行此命令时,替换根本不起作用。

如果我将\保留在路径的末尾,则它将起作用,除了在子文件夹名称的前面保留反斜杠:

\Subfolder1\file1.txt  
\Subfolder2\file2.txt  
\Subfolder3\file3.txt  

我尝试了多种方法来使其工作,包括添加更多的反斜杠以逃避反斜杠,并在要替换的字符串周围将单引号更改为双引号,但是没有任何效果。

有人会指出我做错了正确的方向吗?


编辑后添加:

Boxdog的评论让我看看我在记事本中的初始导出CSV。此CSV是目录中全名的导出。当我在Notepad ++中查看它时,记录如下所示:

"FullName"
"C:\Folder1\Subfolder1\file1.txt"
"C:\Folder1\Subfolder2\file2.txt"
"C:\Folder1\Subfolder3\file3.txt"

我认为双引号引起了问题。如果是这样,我该如何补救?

2 个答案:

答案 0 :(得分:0)

鉴于您上面的示例,我创建了一个名为test.csv的文件,并使用一个简单的foreach对其进行了循环,如下所示:

$input_file = Import-Csv .\test.csv

foreach ($row in $input_file) {
    # Replacing C:\FolderX\SubfolderX\ where X could be any character
    $trimmed_path = $row.FullName -replace "C:\\Folder.*\\Subfolder.*\\", ""

    Write-Host "Trimmed Path: $trimmed_path"
}

当前的Write-Host仅用于演示目的-您显然可以做任何您想做的事情:-)

  

请注意,我在替换语句中将.用作“通配符”,以允许路径名中“文件夹”和“子文件夹”之后的任何字符

答案 1 :(得分:0)

我终于弄清楚了这个问题。我一直忘了PS会将所有内容导入为对象,因此即使数据在屏幕上看起来像字符串,也不是字符串。

一旦我记得我使用Out-String命令将对象转换为字符串,就解决了这个问题。

我感谢大家对此的帮助!