2016-10-12 17 views
-1

Wie kann ich eine Stapeldatei erstellen, die nur bestimmte Zeichen aus den Dateinamen entfernt? Ist es möglich, in einem Skript zu tun? Ich suche, diese Symbole zu entfernen:Umbenennen von Dateien zum Entfernen bestimmter Zeichen

+0

Das meiste, was Sie geschrieben haben, ist irrelevant, was Sie eigentlich wollen; Ich schlage vor, dass Sie die Waffel entfernen und einfach fragen * "Wie benenne ich eine Gruppe von Dateien im Stapel um, indem ich einzelne Zeichen in der Menge lösche" ({[}]) + - '?" * – Clifford

Antwort

0

Lassen Sie mich Ihnen vorstellen Ruby, eine Skriptsprache viel mächtiger und einfacher zu lernen als die M $ Alternative Powershell. Den Windows-Interpreter finden Sie unter http://rubyinstaller.org/ Ich könnte Ihnen den Code in einer Zeile geben, aber zur Verdeutlichung hier ein 4-Zeilen-Programm, das tut, was Sie brauchen.

Dir['c:/temp/*.package'].each do |file| 
    new_name = File.basename(file.gsub(/[({\[}\])+-]/, '')) 
    File.rename(file, new_name) 
end 

Lassen Sie mich erklären, aufzählt der Dir-Befehl den Pfad mit Wildcards in Unix-Notation nach innen, mit Schrägstrichen statt Schrägstriche und für jede Datei, um sie, indem sie die Basisnamen (nur Dateinamen) ein new_name erzeugen des Pfades und mit ein Regulärer Ausdruck zum Ersetzen (gsub) der Zeichen innerhalb des/[]/durch den zweiten Parameter, '' (leere Zeichenfolge). Reguläre Ausdrücke sind der Weg für solche Dinge, viele Informationen zu google, wenn Sie mehr darüber wissen wollen. Schließlich benutze ich die Utility-Klasse Datei (ja Ruby ist völlig objektorientiert), um die Datei in den neuen Namen umzubenennen.

Sie könnten dies mit jeder Sprache tun, aber ich wette nicht so klar und lesbar wie in Ruby. Installieren Sie den Ruby-Interpreter, speichern Sie diese Zeilen in zB cleanup.rb, ändern Sie den Pfad zu Ihrem und starten Sie ihn mit ruby cleanup oder nur cleanup, wenn Ihre Erweiterung korrekt zugeordnet ist.

Diese umbenennt

c:\temp\na({[}])+-me.package 

zu

c:\temp\name.package 

Und als Bonus: hier die eine Zeilenversion, die gleich im aktuellen Ordner der Fall ist.

Dir['*'].each {|f| File.rename(f, File.basename(f.gsub(/[({\[}\])+-]/, '')))} 
0

Die Windows-Befehl cmd.exe Befehl Umbenennen Befehl fehlt die Macht zu tun, was Sie brauchen. Dies kann mit dem PowerShell-Befehl Rename-Item mit dem Operator -Replace mit einem regulären Ausdruck erfolgen.

Die Ausführung von PowerShell-Skripts ist jedoch durch Sicherheitsrichtlinien eingeschränkt. Daher ist es als Cmd-Batch-Skript. Eine Skriptsprache wie Python ist möglicherweise weniger problematisch.

+0

Ruby ist der einfachere Pfad vs Python, sicherlich, wenn Sie nur Erfahrung mit Batch haben – peter

+0

@peter: Ziemlich wahrscheinlich so; Ich sagte nur "wie" - ich kenne keine Sprache besonders gut - es war nur ein Beispiel. Ich würde es persönlich in C++ tun, nur weil das die Sprache ist, die ich am besten kenne und täglich benutze, damit es schneller wäre. Die beste Sprache für schnelle Jobs ist oft die, die Sie bereits kennen, oder die, für die Sie Tools installiert haben, und nicht unbedingt die für diese Aufgabe am besten geeignete Sprache. – Clifford

+0

Sie sind so richtig. Aber das ist beim OP nicht so, je leichter und nachvollziehbarer, desto besser würde ich denken. – peter

0

Der Ausgang

C:\Users\User>(
Set FName=test()[]{}+- 
Set FName=!Fname:(=! 
Set FName=!Fname:)=! 
Set FName=!Fname:{=! 
Set FName=!Fname:}=! 
Set FName=!Fname:[=! 
Set FName=!Fname:]=! 
Set FName=!Fname:+=! 
Set FName=!Fname:-=! 
Echo Ren test()[]{}+-.asc !Fname!.* 
) 
Ren test()[]{}+-.asc test.* 

Die Batch-Datei

SetLocal EnableDelayedExpansion 
for %%A in (*.asc) Do (
Set FName=%%~nA 
Set FName=!Fname:^(=! 
Set FName=!Fname:^)=! 
Set FName=!Fname:{=! 
Set FName=!Fname:}=! 
Set FName=!Fname:[=! 
Set FName=!Fname:]=! 
Set FName=!Fname:+=! 
Set FName=!Fname:-=! 
Echo Ren %%A !Fname!.* 
) 
Verwandte Themen