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

Removing trailing periods from folders in a directory using powershell?

基本上,由于我公司的云服务 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 名称的第一行,然后 trim 删除它们的空格,然后尝试 trim我在 PSIsContainer 名称中有任何尾随句点的 $string3 变量的末尾。虽然它抛出错误,但我不明白为什么。

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

如有任何帮助,我们将不胜感激!

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

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

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

另一种方式:

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

还有另一种方式,如果您正在寻找单行代码并且正则表达式不是您的朋友:

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

如果模式够简单,可以让Get-ChildItem-Include参数帮你过滤。

Edit-Include 参数只能与 -Recurse 组合使用。