it-swarm.com.de

Ersetzen oder löschen Sie bestimmte Zeichen aus den Dateinamen aller Dateien in einem Ordner

Wie lösche ich bestimmte Zeichen oder ersetze bestimmte Zeichen durch andere Zeichen, wenn eine Batch-Datei ausgeführt wird? Gibt es dafür einen DOS-Befehl für die Dateinamen aller Dateien in einem Windows-Ordner auf einmal?

51
VS1

Verwenden Sie PowerShell, um eine DOS-Eingabeaufforderung intelligenter zu gestalten. Hier habe ich gezeigt, wie Sie alle Dateien und Verzeichnisse im aktuellen Verzeichnis, die Leerzeichen enthalten, stapelweise umbenennen, indem Sie sie durch _ - Unterstriche ersetzen.

Dir |
Rename-Item -NewName { $_.Name -replace " ","_" }

EDIT:
Optional kann der Befehl Where-Object Verwendet werden, um Filter nicht auswählbare Objekte auszublenden für das nachfolgende Cmdlet (Befehl let). Die folgenden Beispiele veranschaulichen die Flexibilität, die sich daraus ergibt:

  • Überspringen von Dokumentdateien

    Dir |
    Where-Object { $_.Name -notmatch "\.(doc|xls|ppt)x?$" } |
    Rename-Item -NewName { $_.Name -replace " ","_" }
    
  • So verarbeiten Sie nur Verzeichnisse (Version vor 3.0)

    Dir |
    Where-Object { $_.Mode -match "^d" } |
    Rename-Item -NewName { $_.Name -replace " ","_" }
    

    PowerShell v3.0 führte neue Dir Flags ein. Sie können dort auch Dir -Directory Verwenden.

  • So überspringen Sie Dateien, die bereits einen Unterstrich (oder ein anderes Zeichen) enthalten

    Dir |
    Where-Object { -not $_.Name.Contains("_") } |
    Rename-Item -NewName { $_.Name -replace " ","_" }
    
86
Ravi Thapliyal

Ein einzeiliger Befehl in Windows PowerShell zum Löschen oder Umbenennen bestimmter Zeichen lautet wie folgt. (hier wird das Leerzeichen durch einen Unterstrich ersetzt)

Dir | Rename-Item –NewName { $_.name –replace " ","_" }
30
aphoe

Die PowerShell-Antworten sind gut, aber der Befehl "Rename-Item" funktioniert nicht im selben Zielverzeichnis, es sei denn, ALLE Ihre Dateien enthalten das unerwünschte Zeichen (schlägt fehl, wenn Duplikate gefunden werden).

Wenn Sie wie ich sind und eine Mischung aus guten und schlechten Namen hatten, versuchen Sie stattdessen dieses Skript (ersetzt Leerzeichen durch einen Unterstrich):

Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace(" ", "_") }
11
Dustin Malone

Diese Batch-Datei kann helfen, hat aber einige Einschränkungen. Die Dateinamenzeichen = und% können nicht ersetzt werden (gehen hier aus dem Speicher) und ein ^ in den Dateinamen könnte ebenfalls ein Problem sein.

In diesem Abschnitt %newname: =_% Wird in jeder Zeile im unteren Block das Zeichen nach : Durch das Zeichen nach = Ersetzt, so dass die Anzahl der zu ersetzenden Zeichen unverändert bleibt mit einem Unterstrich.

Entfernen Sie den Befehl echo, um den Befehl ren zu aktivieren, da er die Befehle nur im Konsolenfenster ausgibt, bis Sie dies tun.

Es wird nur der aktuelle Ordner verarbeitet, es sei denn, Sie fügen dem DIR-Befehlsteil /s Hinzu, und dann werden auch alle Ordner unter dem aktuellen Ordner verarbeitet.

Um ein bestimmtes Zeichen zu löschen, entfernen Sie das Zeichen nach dem Zeichen =. In %newname:z=% Würde ein Eintrag wie dieser alle z-Zeichen entfernen (Groß-/Kleinschreibung wird nicht berücksichtigt).

@echo off
for /f "delims=" %%a in ('dir /a:-d /o:n /b') do call :next "%%a"
pause
GOTO:EOF
:next
set "newname=%~nx1"

set "newname=%newname: =_%"
set "newname=%newname:)=_%"
set "newname=%newname:(=_%"
set "newname=%newname:&=_%"
set "newname=%newname:^=_%"
set "newname=%newname:$=_%"
set "newname=%newname:#=_%"
set "newname=%newname:@=_%"
set "newname=%newname:!=_%"
set "newname=%newname:-=_%"
set "newname=%newname:+=_%"
set "newname=%newname:}=_%"
set "newname=%newname:{=_%"
set "newname=%newname:]=_%"
set "newname=%newname:[=_%"
set "newname=%newname:;=_%"
set "newname=%newname:'=_%"
set "newname=%newname:`=_%"
set "newname=%newname:,=_%"

echo ren %1 "%newname%
8
foxidrive