Windows power shell脚本,用于将每个目录中的所有文件重命名为父级名称

时间:2011-10-30 23:46:00

标签: windows shell powershell

我正在学习Windows PS - 但直到我需要一些帮助来编写快速命令:

我有一个目录目录,每个目录都有一个唯一的名称。

我需要将每个目录中的所有文件重命名为其父名称!如下:

当前结构:

/pdfdirectory/pdf_title_directory/filename.pdf
/pdfdirectory/pdf_title_directory123/filename.pdf

在shell脚本之后:

/pdfdirectory/pdf_title_directory/pdf_title_directory.pdf
/pdfdirectory/pdf_title_directory123/pdf_title_directory123.pdf

谢谢!

2 个答案:

答案 0 :(得分:5)

真诚地相信你正在学习Powershell,并会尝试一些东西:

gci .\test -recurse | ?{ -not $_.PsIsContainer } | 
%{rename-item -path $_.fullname -newname ($_.Directory.Name + $_.Extension)}

当然,如果目录中有多个文件,上面的内容将失败。

要理解上述内容,请学习基本的Powershell命令,例如gci(Get-ChildItem的别名)和Powershell管道概念。

答案 1 :(得分:1)

值得注意的是,您可以将Get-ChildItem的输出直接传递给Rename-Item,您不需要foreach。此外,这是一个聪明的部分,-NewName参数值可以是一个产生新名称的脚本块。此脚本块可以使用$ _来引用当前正在处理的文件对象。

所以你可以这样做:

dir -Recurse -Include filename.pdf | ren -NewName { "$($_.Directory.Name).pdf" }

(我认为是Keith Hill让我意识到这个伎俩。)