我有一个CSV文件,例如:

"localpath"
"C:\Users\calabresel"
"C:\Users\goslinep"
"C:\Users\deangelisr"
"C:\Users\bannont"
"C:\Users\goodwind"

我正在寻找一种仅将用户名从每个字段中隔离出来的方法。然后,我将查询AD以确定是否禁用或启用了每个用户。我还没办法弄清楚如何获得最后一块。我的想法是使用-replace将相同的字符串替换为null,如下所示:
$txt = import-csv paths1.csv | % {$_.localpath = $_.localpath -replace "C:\Users\", ""}

伴随着无效的正则表达式模式错误,我认为这是目标字符串包含特殊字符(反斜杠)的结果。然后,我开始寻找一种使powershell实际使用\的方法。那导致我尝试这个:
$txt = import-csv paths1.csv | % {$_.localpath = $_.localpath -replace [Regex]::Escape("C:\\Users\\"), ""}

还有这个
$txt = import-csv paths1.csv | % {$_.localpath = $_.localpath -replace "C:\\Users\\", ""}

这两种方法都可以停止无效的正则表达式错误,并在没有提示的情况下给我换行。但是,当我打印$txt变量时,它是空的...

我确定我是从错误的角度和/或使用了不正确的语法来解决此问题,但是一周前刚开始使用Powershell时,我可以使用一些指导。

提供的任何帮助将不胜感激。

最佳答案

以下将导入CSV文件,然后获取路径的叶子。即用户名。

$txt = Import-Csv paths1.csv | ForEach-Object { Split-Path $_.localpath -leaf }

如果仍然要使用replace方法,只需取出$_.localpath =部分,它应该可以工作。
$txt = Import-Csv C:\@@Scatch\test.csv | % { $_.localpath -replace "C:\\Users\\", ""}

关于windows - 使用-replace从csv的单元格中删除带有特殊字符的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44438328/

10-14 22:57
查看更多