1

Сценарий ниже используется для переименования групповых папок.

Однако я хотел сделать это как общий сценарий, чтобы пользователи могли вводить и использовать его соответственно.

  1. Этот скрипт имеет 3 входа
    • а) Введите путь к исходной папке
    • б) Расширение файлов и
    • в) Новое имя файла будет переименовано

Все в порядке, кроме как с) Новое имя файла будет переименовано

$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 
}

2 ответа2

1
$newName = '$Rename_{0:d6}{1}' -f  $i , $extension  # $rename input cannot be used here

Почему бы и нет? Это определенно работает:

$newName = '{0}_{1:d6}{2}' -f  $Rename, $i, $_.Extension 
0

Во-первых, вам нужно использовать двойные кавычки, а не одинарные, чтобы расширение переменных работало:

"$Rename_{0:d6}{1}" -f  $i , $extension 

Но есть еще проблема. PowerShell считает, что переменная, на которую вы ссылаетесь - это $Rename_ . Зачем? Потому что подчеркивание является допустимым символом в именах переменных. Вам нужно сделать это:

"$($Rename)_{0:d6}{1}" -f  $i , $extension 

(Или воспользуйтесь решением битрейкера.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .