使用 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
组合使用。
基本上,由于我公司的云服务 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
组合使用。