下面的脚本用于批量文件夹重命名。
但是我想将其作为通用脚本,以便用户可以输入并相应地使用它。
- 此脚本有 3 个输入
- a)输入源文件夹路径
- b) 文件的扩展和
- c) 要重命名的新文件名
除 c) 新文件名需要重命名外,其他都很好
$Rename = input
$newName = '$Rename_{0:d6}{1}' -f $i , $extension # $rename input cannot be used here #
我认为上面这行有些问题,有什么办法可以解决这个问题吗?
Write-Host "Renaming Bulk Files" -BackgroundColor Green -ForegroundColor White
$Source = Read-Host "Enter the Source Path Of the Folder, Ex: D:\Test"
$SourceExtension = Read-Host "Enter the Destination File Extension, Ex: *.pdf or *.jpg"
$Rename = Read-Host "Enter the File Name to be renamed"
$i = 0
Get-ChildItem -Path $Source -Filter $SourceExtension |
ForEach-Object {
$extension = $_.Extension
$newName = '$Rename_{0:d6}{1}' -f $i , $extension
$i++
Rename-Item -Path $_.FullName -NewName $newName
}
答案1
$newName = '$Rename_{0:d6}{1}' -f $i , $extension # $rename input cannot be used here
为什么不呢?这绝对有效:
$newName = '{0}_{1:d6}{2}' -f $Rename, $i, $_.Extension
答案2
首先,您需要使用双引号而不是单引号才能使变量扩展起作用:
"$Rename_{0:d6}{1}" -f $i , $extension
但还有一个问题。PowerShell 认为你引用的变量是$Rename_
。为什么?因为下划线在变量名中是有效字符。你需要这样做:
"$($Rename)_{0:d6}{1}" -f $i , $extension
(或者使用 beatcracker 的解决方案。)