gpt4 book ai didi

powershell - 祖 parent 文件夹名称到文件名称

转载 作者:行者123 更新时间:2023-12-02 23:08:10 26 4
gpt4 key购买 nike

我有一个脚本,当我指定c:\ script \ 19 \的确切目录时会运行,问题是,c:\ script中有其他文件夹,例如18、17、16。我在该脚本后附加了19所有文件的最前面。我如何看待正在重命名的文件的祖 parent 并附加它?此类文件的示例如下:

c:\script\18\00000001\Plans.txt
c:\script\19\00001234\Plans.txt
c:\script\17\00005678\App.txt

但是我的脚本正在像这样重命名文件
c:\script\18\00000001\19-0001 Plans.txt
c:\script\19\00001234\19-1234 Plans.txt
c:\script\17\00005678\19-5678 App.txt

我的脚本是这样的:
 $filepath = Get-ChildItem "C:script\" -Recurse |
ForEach-Object {
$parent = $_.Parent
$grandparent = $_.fullname | Split-Path -Parent | Split-Path -Parent | Split-Path -Leaf
}
Get-ChildItem "C:\Script\" –recurse –file |
Where-Object {$_.Name –notmatch ‘[0-9][0-9]-[0-9]’} |
rename-item -NewName {$grandparent + '-' + $_.Directory.Name.SubString($_.Directory.Name.length -4, 4) + ' ' + $_.Name}

最佳答案

最简单的解决方案是将字符串分割与 -split operatordelay-bind script block(您已尝试使用)结合在一起:

Get-ChildItem C:\Script –Recurse –File -Exclude [0-9][0-9]-[0-9]* |
Rename-Item -NewName {
# Split the full path into its components.
$names = $_.FullName -split '\\'
# Compose the new file name from the relevant components and output it.
'{0}-{1} {2}' -f $names[-3], $names[-2].Substring($names[-2].Length-4), $_.Name
} -WhatIf
-WhatIf预览重命名操作;删除它以执行实际的重命名。
请注意,如何将 -ExcludeGet-ChildItem直接与通配符表达式一起使用,以排除已经具有目标名称格式的文件。

您的原件不起作用的主要原因是您计算了单个静态 $parent$grandparent值,而不是从每个输入路径派生特定于输入路径的值。

另外,您的 $grandparent计算不必要地复杂; Gert Jan Kraaijeveld's helpful answer显示了一种更简单的方法。

关于powershell - 祖 parent 文件夹名称到文件名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54257298/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com