PowerShell & Batch-Dateien mit Benutzereingabe

0

OK, zunächst ein Dankeschön an nex84 für die Beantwortung meiner letzten Frage und an alle, die unter diesem Link ebenfalls Beiträge eingereicht haben: https://superuser.com/a/1051727/569550 ...

Ich habe jetzt eine neue Frage, die jedoch mit dem Code im Link übereinstimmt.

Ich habe ein Skript erstellt, das Text aus einem Dateinamen entfernt und durch neuen Text oder ein Leerzeichen ersetzt.

Dies wurde in der letzten Frage nach dem Link angegeben, den ich gab. Ich habe eine Benutzereingabe hinzugefügt, damit der Benutzer eingeben kann, was der Text entfernt werden soll und was er hinzufügen möchte.

Ich habe Probleme mit dem Hinzufügen von neuem Text zum Dateinamen. Irgendwelche Vorschläge...

Der folgende Code funktioniert für das entfernte, aber wenn der Umbenennungsvorgang im Skript eingeht, wird dem Dateinamen "$ Rename" hinzugefügt, anstatt das, was der Benutzer eingibt.

Beispiel: Wenn der Benutzer "-Layout1" entfernt hat, aber "-Model" zum Dateinamen hinzufügt, erhalten wir:

BLABLA-Layout1.pdf ==>  BLABLA$Replace.pdf

Code:

CD C:\TempPDF 
$Filter = Read-Host -Prompt 'Input Text To Be Removed' 
$Rename = Read-Host -Prompt 'Input Text To Be Added' 
Write-Host "You input server '$Filter' and '$Rename'" 
Get-ChildItem -Filter "*$Filter*" -Recurse | Rename-Item -NewName {$_.name -replace "$Filter",'$Rename' }
Christopher
quelle

Antworten:

1

Einfache Anführungszeichen in Powershell begrenzen nur Zeichenfolgenwerte. Verwenden Sie in diesem Fall doppelte Anführungszeichen, wenn Sie die Variable $ Rename an den Dateinamen übergeben.

Get-ChildItem -Filter "*$Filter*" -Recurse | Rename-Item -NewName {$_.name -replace "$Filter","$Rename" }
bbatman
quelle
Perfekt. Danke für die schnelle Antwort. Das funktioniert jetzt perfekt. Alles was ich jetzt tun muss, ist es in eine Exe zu packen und ich kann es an meine Kollegen verteilen. Ihr seid fantastisch! Danke noch einmal.
Christopher
Mit diesem Code kann ich nicht mehr alle Renaming Utilities herunterladen. Danke noch einmal.
Christopher