我正在学习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
谢谢!
答案 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让我意识到这个伎俩。)