Batch mehrere Zeichen aus Dateinamen entfernen
Ausgangspunkt: In einem Ordner landen Rechnungen mit beliebigen Dateinamen. Die Namen enthalten zum Teil Zeichen, die von der Software akzeptiert werden und dazu führen, dass die Datei nicht verarbeitet wird.
Ziel: Per Batch-Script aus allen PDF-Dateien die "verbotenen Zeichen" entfernen (welche da wären: .#+), ohne den Punkt vor der Dateiendung zu löschen und die Dateien ins Zielverzeichnis \\server\rechnungen zu verschieben.
Dabei soll es auch möglich sein die Liste der verbotenen Zeichen ggf. zu erweitern.
Prinzipiell ist es egal wie die Dateien heißen. Ich möchte aber nicht einfach alle in 1.pdf, 2.pdf usw. umbenennen, um leichter einen Bezug zum Originaldateinamen herstellen zu können.
Ich habe bereits per Variablenmanipulation einzelne Zeichen ersetzen können, jedoch nicht mehrere auf einmal.
An sich kann es wahrscheinlich nicht so schwer sein, ich bin auf noch nicht auf einen grünen Zweig gekommen.
Gruß kleinerbub
Ziel: Per Batch-Script aus allen PDF-Dateien die "verbotenen Zeichen" entfernen (welche da wären: .#+), ohne den Punkt vor der Dateiendung zu löschen und die Dateien ins Zielverzeichnis \\server\rechnungen zu verschieben.
Dabei soll es auch möglich sein die Liste der verbotenen Zeichen ggf. zu erweitern.
Prinzipiell ist es egal wie die Dateien heißen. Ich möchte aber nicht einfach alle in 1.pdf, 2.pdf usw. umbenennen, um leichter einen Bezug zum Originaldateinamen herstellen zu können.
Ich habe bereits per Variablenmanipulation einzelne Zeichen ersetzen können, jedoch nicht mehrere auf einmal.
An sich kann es wahrscheinlich nicht so schwer sein, ich bin auf noch nicht auf einen grünen Zweig gekommen.
Gruß kleinerbub
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2730351676
Url: https://administrator.de/contentid/2730351676
Ausgedruckt am: 24.11.2024 um 17:11 Uhr
10 Kommentare
Neuester Kommentar
auch keine Begrüßung,
was hast Du denn schon erarbeitet?
Code wäre nett
VG
was hast Du denn schon erarbeitet?
Code wäre nett
VG
Moin,
Powershell:
Powershell Leitfaden für Anfänger
Regex Tutorial
Gruß Thomas
Zitat von @kleinerbub:
Ich habe bereits per Variablenmanipulation einzelne Zeichen ersetzen können, jedoch nicht mehrere auf einmal.
An sich kann es wahrscheinlich nicht so schwer sein, ich bin auf noch nicht auf einen grünen Zweig gekommen.
mit Batch ist das der reinste Graus. Man müsste für jedes Zeichen einen separaten Replace machen - und auch das funktioniert bei der Verwendung bestimmter Zeichen nicht vernünftig.Ich habe bereits per Variablenmanipulation einzelne Zeichen ersetzen können, jedoch nicht mehrere auf einmal.
An sich kann es wahrscheinlich nicht so schwer sein, ich bin auf noch nicht auf einen grünen Zweig gekommen.
Powershell:
# Quellpfad
$Source = "C:\Pfad\zum\Quellordner"
# Zielpfad
$Target = "\\server\rechnungen"
# Zu entfernende Zeichen
$illegalChars = ".#+"
# Regex-Replace-String aus zu entfernenden Zeichen bilden
$replace = $illegalChars.ToCharArray().Foreach({[regex]::Escape($_)}) -join '|'
# Für jede Datei im Quellpfad...
Foreach ($File in Get-ChildItem -File -Path $Source) {
# Datei an Zielpfad verschieben und umbenennen
Move-Item -Path $File -Destination "$Target\$($File.BaseName -replace $replace)$($File.Extension)"
} # Ende der Foreach-Schleife
Powershell Leitfaden für Anfänger
Regex Tutorial
Gruß Thomas
Zu einer Batch-Lösung kann ich leider nichts beitragen. Aber wenn es darum geht in einem Verzeichnis ganz viele Dateinamen auf einen Rutsch zu ändern, dann kann ich Dir nur den Total Commander empfehlen. Damit geht das ganz einfach. Im Total Commander einfach in das entsprechende Verzeichnis gehen, dort alle Dateien markieren, die irgendwie geändert werden sollen, STRG+M drücken, im Bereich Suchen & Ersetzen z.B. das #eingeben und durch Nichts oder beliebiges anderes Zeichen ersetzen. Auf Start klicken und abwarten. Das war es. Man kann dort auch die Dateiendung ändern, Datum anhängen, Aufzählungen dranhängen oder beliebige andere Zeichenkombinationen ergänzen oder austauschen. Groß- und Kleinschreibung kann man auch anpassen. Also da geht wirklich viel. Und das eben bei hunderten Dateien gleichzeitig.
Total Commander
Matthias
Total Commander
Matthias
Moin Matthias,
IMHO ist dieser dem TotalCommander in nahezu jeder Hinsicht überlegen; und ist zudem kostenlos.
Gruß Thomas
Zitat von @DOCTEC:
Aber wenn es darum geht in einem Verzeichnis ganz viele Dateinamen auf einen Rutsch zu ändern, dann kann ich Dir nur den Total Commander empfehlen.
in dem Fall kann ich dir nur nahelegen, dir mal den FreeCommander anzugucken.Aber wenn es darum geht in einem Verzeichnis ganz viele Dateinamen auf einen Rutsch zu ändern, dann kann ich Dir nur den Total Commander empfehlen.
IMHO ist dieser dem TotalCommander in nahezu jeder Hinsicht überlegen; und ist zudem kostenlos.
Gruß Thomas
Aber der FreeCommander hat ja ein ganz furchtbares, modernes Design 🤪 !!! Wo bleibt denn da diese wunderschöne nostalgische Windows 95 Optik vom Total Commander? 🤣 Ich verwende den Total Commander schon seit den 90er Jahren (damals noch Win Commander (und der sah damals schon so aus 😁)) und kenne mich mit dem aus, deswegen bleibe ich dabei. Für das wofür ich ihn verwende reicht mir der. Aber sicher, wenn man sowas in der Richtung neu sucht, dann kann man natürlich auch diesen FreeCommander verwenden.
Ich habe ihn mir jetzt mal zusätzlich installiert und werde da mal ein bisschen mit rumspielen.
Ich habe ihn mir jetzt mal zusätzlich installiert und werde da mal ein bisschen mit rumspielen.
Moin,
in etwa so:
Wie bereits erwähnt: Für die verwendeten Zeichen funktioniert das zwar, aber bei der Verwendung spezieller Zeichen bekommst du Probleme. Unter anderem machen auch die Umlaute "äöü" und das "ß" mit Batch immer Probleme.
Gruß Thomas
PS:
Imho ist es besser, alle deine Skripte an einem zentralen Ort zu speichern (und mit einem Quellpfad zu arbeiten), statt die Skripte in den Ordnern zu lagern, die sie bearbeiten.
Zum einen brauchst du so später nur den einen Skriptordner zu kopieren, wenn du mal auf einen neuen Rechner umziehst - zum anderen wird das Skript selbst so nicht gelistet, wenn du von diesem aus alle Dateien im Quellordner verarbeiten lässt.
Zitat von @kleinerbub:
Das PS-Script von @TK1987 funktioniert zwar, aber wie eine Batch-Lösung aussehen könnte, würde mich trotzdem interessieren.
Das PS-Script von @TK1987 funktioniert zwar, aber wie eine Batch-Lösung aussehen könnte, würde mich trotzdem interessieren.
in etwa so:
@echo off
set target=\\server\rechnungen
for %%A in ("*.pdf") do call :Replace "%%A"
goto :EoF
:Replace
set Filename=%~n1
set Filename=%Filename:.=%
set Filename=%Filename:#=%
set Filename=%Filename:+=%
move "%~1" "%target%\%Filename%%~x1"
Wie bereits erwähnt: Für die verwendeten Zeichen funktioniert das zwar, aber bei der Verwendung spezieller Zeichen bekommst du Probleme. Unter anderem machen auch die Umlaute "äöü" und das "ß" mit Batch immer Probleme.
Gruß Thomas
PS:
Imho ist es besser, alle deine Skripte an einem zentralen Ort zu speichern (und mit einem Quellpfad zu arbeiten), statt die Skripte in den Ordnern zu lagern, die sie bearbeiten.
Zum einen brauchst du so später nur den einen Skriptordner zu kopieren, wenn du mal auf einen neuen Rechner umziehst - zum anderen wird das Skript selbst so nicht gelistet, wenn du von diesem aus alle Dateien im Quellordner verarbeiten lässt.