Wie kann ein einzelnes Zeichen in Windows-Dateinamen mithilfe einer Batchdatei ersetzt werden?

33288
Matt Rogish

Ich habe einen Windows Server 2003-Server mit einer ganzen Reihe von Dateinamen, die umbenannt werden müssen. Grundsätzlich brauche ich nur alle -(Bindestriche) durch _(Unterstriche ) zu ersetzen, egal wo sie im Dateinamen stehen. Angenommen, es gibt keine Duplikate.

Ich kann dies auf meinem Mac mit einem kleinen Skript tun, aber die Dateien sind zu groß und verrückt, um sie auf meinen Mac zu übertragen, umzubenennen und dann auf den Server zurückzukehren. Ist es möglich, dies in einer Windows-Eingabeaufforderung auszuführen, ohne einen Renamer oder zusätzliche Software herunterladen zu müssen?

6
Sie können sie einfach von Ihrem anderen Computer über SMB umbenennen. Dateien müssen nur für eine Namensänderung kopiert werden. Joey vor 15 Jahren 2

5 Antworten auf die Frage

10
Murdoch Ripper

Über die Eingabeaufforderung - vorausgesetzt, dass sich alle Dateien im selben Verzeichnis befinden:

EINZEILER

for /f "tokens=* delims= " %i in ('dir /b "*.txt"') do Set LIST=%i& set LIST | ren "%~fi" "%LIST:-=_%"

Beachten Sie, dass dies ein One-Shot-Fenster pro Eingabeaufforderung ist. Wenn Sie dies aus irgendeinem Grund abbrechen, müssen Sie eine weitere Eingabeaufforderung öffnen und erneut ausführen.

I was trying to figure out a for /f method for it and my brain leaked out through my ears well before I got to the solution. Cracking bit of code, well done! AdamV vor 15 Jahren 2
Thanks Adam. This actually took me about a week to figure out how to do. The only reason I did it was because of Command Line Kung Fu! (http://blog.commandlinekungfu.com/2009/05/not-ready-yet-episode-replacing-strings.html) Murdoch Ripper vor 15 Jahren 0
Nett!!! Ich habe einen One-Liner auf meinem Mac, den ich verwendet habe, hoffte auf einen in Windows. GUT GEMACHT! Matt Rogish vor 15 Jahren 0
Ich habe es für eine kleine Korrektur bearbeitet (ich hatte Probleme mit Leerzeichen in den Dateinamen) Daniel Mošmondor vor 12 Jahren 0
funktioniert das auch für Ordner? Sun vor 11 Jahren 0
Ja tut es. Ändern Sie einfach den folgenden Code von "('dir / b" * .txt "')" in "('dir / ad')". Murdoch Ripper vor 11 Jahren 0
2
Matt Rogish

Fand es bei stackoverflow:

https://stackoverflow.com/questions/261515/batch-file-script-to-remove-special-characters-from-filenames-windows

Set fso = CreateObject("Scripting.FileSystemObject") Set re = New RegExp  re.Pattern = "[-]" ' put all characters that you want to strip inside the brackets' re.IgnoreCase = True re.Global = True  If WScript.Arguments.Unnamed.Count = 1 Then If fso.FolderExists(WScript.Arguments.Unnamed(0)) Then Recurse fso.GetFolder(WScript.Arguments.Unnamed(0)) Else WScript.Echo "Folder not found." End If Else WScript.Echo "Please give folder name as argument 1." End If   Sub Recurse(f) For Each sf In f.SubFolders Recurse sf WScript.Echo sf.Name, " -> ", re.Replace(sf.Name, "_") sf.Name = re.Replace(sf.Name, "_") Next For Each sf In f.Files WScript.Echo sf.Name, " -> ", re.Replace(sf.Name, "_")  If sf.Name <> re.Replace(sf.Name, "_" ) Then sf.Name = re.Replace(sf.Name, "_") End If Next End Sub 
Dies scheint eher zu entfernen als zu ersetzen, obwohl ich mir sicher bin, dass es leicht geändert werden kann AdamV vor 15 Jahren 1
Der Post, zu dem Sie einen Link erstellen, enthält Anweisungen zum Ausführen des Skripts. Es wäre hilfreich, wenn Sie diese Informationen in Ihre Antwort aufnehmen. quack quixote vor 15 Jahren 0
2
Eric Leschinski

Batchdatei, um ein Zeichen in einem Dateinamen durch ein anderes Zeichen zu ersetzen

Erwägen Sie die Verwendung einer kostenlosen GUI-App, um die Hand zu halten: http://www.bulkrenameutility.co.uk/Main_Intro.php

Wenn Sie dies selbst mit einer Batchdatei machen müssen, seien Sie äußerst vorsichtig! Batch-Skripte haben keine Schaltfläche "Rückgängig machen". Wenn Sie ein Fledermausskript ausführen, das für alle Dateien rekursiv gilt C:, haben Sie gerade alle Dateien auf Ihrem Computer umbenannt, und das Programm wird sofort beendet und der Startvorgang schlägt fehl. Sie müssen eine vollständige Neuinstallation des Betriebssystems durchführen. Habe immer ein Backup!

Zuerst müssen Sie entscheiden, ob die Batchdatei für eine einzelne Datei arbeiten soll. Alle Dateien in einem Verzeichnis bearbeiten? Oder machen Sie es rekursiv (alle Dateien / Ordner in einem Verzeichnis). Hier sind einige Hinweise:

Batchdatei, um alle Unterstriche _durch den Buchstaben Maller Dateien im aktuellen Verzeichnis zu ersetzen

Fügen Sie dies in eine Batchdatei mit dem Namen change_underscores_in_this_directory.bat

@echo off setlocal enabledelayedexpansion for %%a in (*_*) do ( set file=%%a ren "!file!" "!file:_=M!" ) 

Wenn Sie es ausführen, werden alle Dateien in diesem Verzeichnis mit einem Unterstrich in ein 'M' geändert.

Verwenden Sie eine Stapeldatei, um Leerzeichen durch nichts zu ersetzen (Leerzeichen entfernen):

https://stackoverflow.com/questions/11270453/wie-zu-remove-spaces-von-file-names-in-bulk

Verwenden Sie eine Stapeldatei, um Leerzeichen durch Unterstriche zu ersetzen, rekursiv:

https://stackoverflow.com/questions/1613644/wie-nach-referenzname-rekonstruiert-von-windows-batch-operation

Es funktioniert super! Marco Demaio vor 9 Jahren 0
1
Vlad

Eine andere Lösung wäre die Verwendung von zwei Batchdateien.

Datei 1: run_rn.bat:

forfiles /m "*.log" /c " cmd /c rn @file" 

Datei 2: rn.bat:

set LIST1=%1 set LIST2=%LIST1:_=;% ren %LIST1% %LIST2% 

Die Batchdateien müssen sich in demselben Verzeichnis befinden wie die Dateien, die Sie ändern möchten.

0
AdamV

12noon bietet ein KOSTENLOSES Programm zum Umbenennen von Dateien mit vollständiger Unterstützung für reguläre Ausdrücke, was ziemlich cool ist. "Name Twister" Infoseite mit Links zum Download

Ich habe diese nicht im Ärger benutzt, aber ich habe andere Apps (insbesondere Display-Wechsler) benutzt und war wirklich glücklich.