使用PowerShell从目录中的文件夹中删除尾随句点?

时间:2015-05-29 20:38:21

标签: powershell rename directory file-rename

基本上我有几百个文件夹,因为我公司的云服务Box.com而在文件夹名称的末尾有尾随句号。

我们正在尝试使用powershell脚本删除句点,但不可否认,我的powershell知识正处于初级阶段。

$string = Get-ChildItem -Recurse | ? {$_.PSIsContainer} | Select Name
$string2 = Trim($string)
$string.Length
$string3 = $string.TrimEnd(".")
dir | ? { $string } | % { mv $_ -Destination ($_.Name.$string3) }

所以上面我在相关文件夹中运行第一行来获取PSIsContainer名称,然后修剪它们的空格,然后尝试修剪我的$ string3变量中的任何尾随句点的结尾PSIsContainer名称。它虽然引发了一个错误,但我无法弄清楚原因。

Method invocation failed because [System.Object[]] doesn't contain a method named 'TrimEnd'.
At line:1 char:27
+ $string3 = $string.TrimEnd <<<< (".")
+ CategoryInfo          : InvalidOperation: (TrimEnd:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

$string是一个目录名称数组,而不是字符串。你不能TrimEnd()数组。

您可能需要创建一个foreach循环来为每个目录执行所需的操作。

$Directories = Get-ChildItem -Recurse | ? {$_.PSIsContainer}
foreach($Dir in $Directories)
{
    Rename-Item $Dir Trim($Dir.Name)
    Rename-Item $Dir $Dir.Name.TrimEnd(".")
}

答案 1 :(得分:0)

另一种方式:

$pattern = '^\s*(.*?)\.+\s*$'
Get-ChildItem -Recurse -Directory |
  ? { $_.Name -match $pattern } |
  Rename-Item -NewName { $_.Name -replace $pattern, '$1' }

答案 2 :(得分:0)

还有一种方法,如果你正在寻找一个单行,如果正则表达式不是你的朋友:

ls -Rec -Dir -Incl '*.' | % { $_.MoveTo($_.FullName.Trim().TrimEnd('.')) }

如果模式足够简单,您可以让-Include Get-ChildItem参数为您进行过滤。

修改-Include参数仅与-Recurse结合使用。