使用Powershell递归重命名文件

Mat*_*hew 25 powershell rename

我目前有一行批量重命名我目前在的文件夹中的文件.

dir | foreach { move-item -literal $_ $_.name.replace(".mkv.mp4",".mp4") }
Run Code Online (Sandbox Code Playgroud)

此代码适用于我当前所在的目录,但我想要的是从包含11个子文件夹的父文件夹运行脚本.我可以通过单独导航到每个文件夹来完成我的任务,但我宁愿运行一次脚本并完成它.

我尝试了以下方法:

get-childitem -recurse | foreach { move-item -literal $_ $_.name.replace(".mkv.mp4",".mp4") }
Run Code Online (Sandbox Code Playgroud)

任何人都可以指出我在正确的方向吗?我根本不熟悉Powershell,但在这种情况下它符合我的需要.

Col*_*350 33

你很亲密:

Get-ChildItem -File -Recurse | % { Rename-Item -Path $_.PSPath -NewName $_.Name.replace(".mkv.mp4",".mp4")}
Run Code Online (Sandbox Code Playgroud)


Jas*_*irk 32

有一个鲜为人知的功能是专为这种情况而设计的.简而言之,您可以执行以下操作:

Get-ChildItem -Recurse -Include *.ps1 | Rename-Item -NewName { $_.Name.replace(".ps1",".ps1.bak") }
Run Code Online (Sandbox Code Playgroud)

这样可以通过传递参数NewName的scriptblock来避免使用ForEach-Object.PowerShell足够聪明,可以为每个被管道对象评估scriptblock,设置$ _就像使用ForEach-Object一样.