
Ich habe ein Problem, das anscheinendWie lösche ich Dateien mit einem bestimmten Text im Namen?würde löschen, was ich nicht gelöscht haben möchte.
Aufgrund eines Problems mit OneDrive nach der Installation einer zusätzlichen internen Festplatte und dem Verschieben meines OneDrive-Ordners gemäß den Anweisungen unterMicrosoft-SupportIch weiß nicht, was ich falsch gemacht habe, aber jetzt habe ich alle meine Dateien auf meine neue Festplatte kopiert und OneDrive synchronisiert mit Duplikaten jeder Datei mit - copy
einem Ende vor der Erweiterung. Das sind Gigabyte an Daten über Tausende von Dateien.
Wenn ich mir anschaue, was gelöscht würde, wenn ich *- copy.*
Powershell oder cmd.exe verwende, scheint es, dass eine von mir erstellte Datei (copy.bat) gelöscht würde, und diese möchte ich behalten.
Wie verwende ich Platzhalter, um alles - copy
am Ende des Dateinamens zu löschen, aber Dateien wie copy.bat zu schützen?
Antwort1
Was im Moment passiert, ist, dass Ihr *- copy.*
als zwei durch Leerzeichen getrennte Argumente analysiert wird: *-
und copy.*
. Sobald Sie dies sehen, können Sie leicht erkennen, dass das zweite davon auf Ihre copy.bat
Datei zutrifft.
Die Lösung besteht darin, den invarianten Teil in doppelte Anführungszeichen zu setzen (insbesondere sicherzustellen, dass sich das Leerzeichen innerhalb der Anführungszeichen befindet): *"- copy".*
:
DIR *"- copy".*
Get-ChildItem *"- copy".*
Da es sich um Windows handelt, können Sie „too“ tatsächlich in Anführungszeichen setzen *
, da es vom Befehl und nicht vom Powershell/CMD-Tool analysiert wird:
DIR "*- copy.*"
Get-ChildItem "*- copy.*"
Nebenbei bemerkt: Wenn Sie vorhaben, ein UNIX/Linux-basiertes System (einschließlich eines Mac) zu verwenden, gewöhnen Sie sich nicht an, ein Platzhalterzeichen in Anführungszeichen zu setzen und zu erwarten, dass es als Muster fungiert, denn das wird es nicht: Es wird als wörtliches Asterisk analysiert. Mein erster Vorschlag wird überall funktionieren. Der zweite Vorschlag ist Windows-spezifisch.
Antwort2
Die .bat
Datei muss sich nicht im selben Ordner wie die zu löschenden Dateien befinden. Sie können sie auch aus einem anderen Ordner ausführen, indem Sie ausführen
\path\copy.bat
.
Wenn zusätzlich zu noch weitere Dateien betroffen sind copy.bat
, müssen Sie diese vor dem Ausführen an einen anderen Ort kopieren copy.bat
.
Sie können in PowerShell auch komplexere Regex-Ausdrücke verwenden als die in CMD verfügbaren primitiven. Sie können den Regex dann verfeinern, um weniger Dateien einzuschließen, wenn Sie deren Benennungsregeln besser definieren können.
Antwort3
Schauen Sie sich ein nützliches kostenloses Tool an: Bulk Renaming Utility.https://www.bulkrenameutility.co.uk
Es kann Massenumbenennungsaufgaben rekursiv scannen und in der Vorschau anzeigen und ist äußerst nützlich, da es eine Vorschau bietet. Seien Sie gewarnt – Sie müssen zuerst ein Backup erstellen. Es ist ein leistungsstarkes Tool und es gibt nach dem Commit keine Rückgängig-Option.