基本上我有几百个文件夹,因为我公司的云服务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
非常感谢任何帮助!
答案 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
结合使用。