我有一个包含完整文件路径列表的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"
我认为双引号引起了问题。如果是这样,我该如何补救?
答案 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命令将对象转换为字符串,就解决了这个问题。
我感谢大家对此的帮助!