tommylik
Goto Top

Epub-Datein mit Name des Autor und Titel in angelegte Ordner einsortieren

Hallo,

Ich habe einen Ordner mit ganz vielen Epub Dateien. F:\EBooks\Unsortiert.
Dann habe ich den Ordner F:\EBooks\Autoren.
Darunter habe ich schon mal viele Ordner händisch angelegt.
Die Ordner haben den Namen des Autoren. Sie können so aussehen:

z.B:

Adams, Melody
Aiken, L. Roy
Finlay, Charles Coleman
Saint-Saens, Charles-Camille
Salis-Seewis, Johann Gaudenz von
Schenkendorf, Max von

Armentrout, Jennifer L
Cast, P. C

Ein "." Punkt am Ende des Ordnernamen geht nicht. Wird von Windows entfernt.

Die Dateinamen sehen folgendermaßen aus:

Adams, Melody - Titel.epub
Aiken, L. Roy - Titel.epub
Finlay, Charles Coleman - Titel.epub
Saint-Saens, Charles-Camille - Titel.epub
Salis-Seewis, Johann Gaudenz von - Titel.epub
Schenkendorf, Max von - Titel.epub

Armentrout, Jennifer L. - Titel.epub
Cast, P. C. - Titel.epub

Im Dateinamen ist der "." Punkt vorhanden.

Was immer gleich ist das zwischen dem Namen und dem Titel ein Bindestrich zwischen 2 Leerzeichen ist.


Ich würde gerne mit einer Batchscript die Dateien in die entsprechenden Ordner verschieben. Und sollte ein Ordner nicht da sein wäre es
schön wenn er angelegt werden könnte.

Ich habe natürlich schon mal geschaut und etwas begonnen. Aber die For-Schleife weiß ich nicht zu erstellen falls ich überhaupt eine brauche.

@echo off & setlocal ENABLEDELAYEDEXPANSION 

:: Quellordner 
set "quelle=F:\EBooks\Unsortiert"   

:: Zielordner 
set "ziel= F:\EBooks\Autoren\"   

:: Durchlaufe die Dateinen....?

for /f "tokens=1,2 delims=," %%a in (?????) DO @(   

:: Wenn der Ordner noch nicht existiert, erstelle ihn 

  if not exist "!zielordner!" md "!zielordner!"   

:: Verschiebe Datei in den neuen Ordner 

  move "%quelle%\!file!" "!zielordner!"   
)

Ich habe hier im Forum schon geschaut aber was ich brauche mit den vielen Varrianten von Namen ist hier im Forum auch nicht zu finden.
Und obendrein bin ich mit den Befehlen tokens, delims usw. auf Kriegsfuß ich verstehe Sie nicht.

Könnte mir einer von Euch bitte helfen. Ich weiß nicht mehr weiter. Vielen Dank im voraus.

Mfg Tommylik

Content-Key: 302556

Url: https://administrator.de/contentid/302556

Printed on: April 25, 2024 at 08:04 o'clock

Member: batchnewbie
Solution batchnewbie Apr 22, 2016 updated at 14:16:58 (UTC)
Goto Top
Hi,
so oder so ähnlich könnte es laufen:
@echo off & setlocal enabledelayedexpansion
cls

set "Verzeichnis=%~dp0"  
set "Typ=*.epub"  
set "ZielVerzeichnis=F:\EBooks\Autoren\"  

pushd %Verzeichnis% || goto :eof

for /f "delims=" %%i in ('dir /b /a-d "%Typ%"') do (  
    for /f "delims=- tokens=1" %%j in ("%%i") do (  
        set "DateiName=%%j"  
        set "DateiName=!DateiName:~0,-1!"  
        echo Erstelle: "!DateiName!"  
        echo md "%ZielVerzeichnis%!Dateiname!" 2>nul  
        echo copy "%%i" "%ZielVerzeichnis%!Dateiname!"  
     )
)
pause>nul    

wenn alles passt, das echo vor md und copy/(move) in Zeile 15/16 entfernen...

Edit: Da bin ich noch mal mit einem Edit, weil ich gerade gesehen habe, dass Dateien wie Saint-Saens, Charles-Camille - Titel.epub oder Salis-Seewis, Johann Gaudenz von - Titel.epub nicht den richtigen Ordner erstellen... hier eine kleine Anpassung face-smile
@echo off & setlocal enabledelayedexpansion
cls

set "Verzeichnis=%~dp0"  
set "Typ=*.epub"  
set "ZielVerzeichnis=F:\EBooks\Autoren\"  

pushd %Verzeichnis% || goto :eof

for /f "delims=" %%i in ('dir /b /a-d "%Typ%"') do (  
    set "Datei=%%i"  
    set "Datei=!Datei: - =#!"  
    for /f "delims=# tokens=1" %%j in ("!Datei!") do (  
        set "DateiName=%%j"  
        echo Erstelle: "!DateiName!"  
        echo md "%ZielVerzeichnis%!Dateiname!" 2>nul  
        echo copy "%%i" "%ZielVerzeichnis%!Dateiname!"  
        echo.
     )
)
pause>nul        
Ich hoffe, dass es jetzt so ist wie du es haben brauchst.
Member: Tommylik
Tommylik Apr 22, 2016 at 15:19:23 (UTC)
Goto Top
Hallo batchnewbie,

Vielen Dank für deine tolle Hilfe und für dein Script.
Funktioniert bestens.
Ich habe noch eine Kleinigkeit gefunden die ärgerlich sein kann wenn ich mal nicht aufpasse ob der Dateiname richtig geschrieben ist.

Könnte man in das Script vielleicht noch mit einbringen das Dateien die nach dem ersten Namen kein Komma haben ignoriert werden?

z. B
Adam Nevill - Der letzte Tag. epub

Ich möchte gerne das kopieren von diesen Dateien unterbinden da man machmal nicht gleich weiß ob der erste Name ein Vorname ist oder ein Nachname. Zum Beispiel von Autoren unser Nachbar Länder.
Ich sortiere die Autoren nach "Nachname, Vorname". Ist ein Komma nach dem ersten Namen (in meinem Fall der Nachname) vorhanden dann weiß ich das ich die Dateinamen schon überarbeitet habe.

Vielen Dank nochmal für deine Hilfe

Mfg Tommylik
Member: batchnewbie
batchnewbie Apr 22, 2016 at 16:41:15 (UTC)
Goto Top
Hi,
du könntest einfach den dir Befehl um eine weiteren Suchkriterium erweitern, sprich ein Komma muss vorhanden sein, zb.:
...
('dir /b /a-d "*,*.epub"')  
...
Sucht nach allen Dateien mit der Endung .epub und einem , in Dateiname, alle Dateien ohne , werden übersprungen.

Du kannst den oberen Code um
...
set "Suchstring=*,"  
...
for /f "delims=" %%i in ('dir /b /a-d "%Suchstring%%Typ%"') do (  
...
ergänzen (Zeile 02), bzw. ändern (Zeile 04).
Mitglied: 114757
114757 Apr 22, 2016, updated at Apr 24, 2016 at 07:48:50 (UTC)
Goto Top
Moin.
Und wer es als Powershell mit allen genannten Bedingungen braucht, bidde face-wink:
$quelle  = 'F:\EBooks\Unsortiert'  
$ziel = 'F:\EBooks\Autoren'  
# Verarbeite alle ePub Dateien die dem Muster entsprechen
gci $quelle -Filter '*.epub' | ?{$_.Basename -match '^(.+?,.+?)\.? - (.*)$'} | %{  
         # setze neuen Pfad mit dem Submatch der Regular Expression zusammen
        $dest = "$ziel\$($matches[1])"  
        # wenn Ordner nicht existiert erstelle ihn
        if (!(Test-Path $dest)){md $dest -Force | out-null}
        # verschiebe Datei
        move-item $_.Fullname -Destination $dest -Force
}
Gruß jodel32
Member: Tommylik
Tommylik Apr 23, 2016 at 08:46:58 (UTC)
Goto Top
Hallo batchnewbie,

Vielen Dank erstmal für deine Antwort und Hilfe. Läuft prima.

Könntest du mir noch bei einer Sache behilflich sein?

Trotz deines Scripts habe ich noch zu viele Dateien die nicht den richtigen Namen haben und nicht einsortiert werden können.

Wie zum Beispiel:

Haas Wolf - Titel.epub
oder
Allison Winn Scotch - Titel.epub -
(Diese Varrianten sollte man zum Schluß Händisch korrigieren, da man hier nicht weiß, was gehört zum Vornamen und was gehört zum Nachnamen.

Wie kann ich nun auf einfache Weise den
"Vornamen Nachnamen - Titel.epub" zu "Nachname, Vorname - Titel.epub" ändern

Ich denke mir für die Zukunft als Extra Script was ich vorher durlaufen lassen kann und dann dein neues Script.

Vielen Dank für deine Hilfe und Zeit.

Mfg Tommylik
Member: Tommylik
Tommylik Apr 23, 2016 at 08:50:24 (UTC)
Goto Top
Hallo jodel32,

Vielen Dank für deine Antwort.

Ich habe von PowerShell keine Ahnung zwar mal was von gehört aber das war es auch schon.

Aber man kann ja dazu lernen.

Könntest du mir den Code erklären? Was brauche ich für PowerShell?

Mfg Tommylik
Member: batchnewbie
batchnewbie Apr 23, 2016 at 09:35:41 (UTC)
Goto Top
Hi,
das kannst du per:
for /f "delims=" %%i in ('dir /b /a-d "*.epub"^|findstr /V "[,]"') do (  
    for /f "tokens=1,2*" %%j in ("%%i") do (  
        echo Umbenenne: "%%i" zu "%%j, %%k %%l"  
        echo ren "%%i" "%%j, %%k %%l"  
        echo.
    )
)
pause>nul
mache, das echovor ren muss du entfernen wenn alles passt.
Den Stück Code einfach vor dem oberen stellen, damit wird zuerst umbenannt, dann kopiert/verschoben.
Member: Tommylik
Tommylik Apr 24, 2016 at 01:44:19 (UTC)
Goto Top
Hallo batchnewbie,

Vielen Dank für deine schnelle Antwort.

Ich habe dein Vorschlag für Testzwecke in einem seperaten Script getestet. In einem extra Ordner
mit verschiedenen Dateien.
Dabei ist mir aufgefallen das der Vorname nicht mit dem Nachnamen getauscht wird.

Ich habe das so abgändert.
        echo Umbenenne: "%%i" zu "%%k, %%j %%l"   
        echo ren "%%i" "%%k, %%j %%l"  

Es gibt bestimmte Namen da funktioniert das umbennen nicht.

"T. C. Boyle" wird zu "C., T. Boyle" richtig wäre "Boyle, T. C."
Bei diesem Namen ist das Leerzeichen zwischen dem "Punkt" und dem "C" das Problem. Sonst würde es funktionieren.

"Susan Elizabeth Phillips" wird zu "Elizabeth, Susan Phillips" richtig wäre "Phillips, Susan Elizabeth"
Wie ich schon sagte hier wäre es besser zu überspringen.
Das sollte man händisch machen, sobald man mehr wie 2 Vor- oder Nachnamen hat. Oder auch dieser Name "Anna von Bayern"

Nochmal vielen Dank für deine Hilfe.

Mfg Tommylik
Mitglied: 114757
114757 Apr 24, 2016 updated at 08:05:16 (UTC)
Goto Top
Zitat von @Tommylik:
Könntest du mir den Code erklären?
Habe oben Kommentare hinzugefügt.

Die Essenz ist hier ist der Filter welcher nur Dateien nimmt die deinen Vorgaben entsprechen.
Mit diesem Teil hier
?{$_.Basename -match '^(.+?,.+?)\.? - (.*)$'}  
werden nur Dateien selektiert die am Namensanfang des Dateinamens (ohne Dateiendung->Basename!) vor dem ' - ' mindestens ein Komma besitzen.
Zusätzlich wird ein "eventuell" vorhandener Punkt welcher aber nicht vorhanden sein muss (siehe das Fragezeichen), ausgefiltert \.?. Die Klammern bezeichnen einen Regular-Expression Submatch auf den man später mit der globalen Variablen $matches[Submatchnummer] zugreifen kann. $matches[1] enthält dann nur den Teil den du für den Ordnernamen benutzen willst. Das zweite Klammernpaar hat jetzt bei deiner Aufgabe keine Relevanz aber damit könntest du in deinem Fall jetzt den Titel für eine andere Aufgabe extrahieren welcher jetzt jeweils in der Variablen $matches[2] stünde.
So ist das ganze ziemlich effizient und man hat mit RegularExpressions eine viel feinere Kontrolle was man extrahieren will. Regex ist sehr mächtig und lässt sich in so gut wie jeder Programmiersprache anwenden, es lohnt sich definitiv diese zu lernen, denn damit eröffnen sich dir Text-Extrahierungsmöglichkeiten die sonst nie möglich wären.

Die Dateien die nicht dem Muster entsprechen verbleiben dann einfach in dem Ordner und du kannst sie manuell umbenennen.

Was brauche ich für PowerShell?
Wie man mit Powershell-Skripten anfängt steht hier gut beschrieben:
https://www.windowspro.de/andreas-kroschel/powershell-scripts-ausfuehren

Gruß jodel32
Member: batchnewbie
batchnewbie Apr 24, 2016, updated at Apr 25, 2016 at 13:48:34 (UTC)
Goto Top
Hi,
ja da hast du gut aufgepasst face-wink

Also was du noch machen könntest wäre eine ausschließen Datei (zb. auslassen.txt) zu erstellt, mit Begriffen die ausgelassen werden sollen und so das ganze ausschließen.
...
for /f "delims=" %%i in ('dir /b /a-d "*.epub"^|findstr /v /g:"auslassen.txt"') do (  
...
Inhalt der auslassen.txt
  • Scotch
  • Boyle
  • Phillips
  • Roy
usw. usf.
Member: Tommylik
Tommylik Apr 24, 2016 at 23:53:27 (UTC)
Goto Top
Hallo batchnewbie,

Vielen Dank für deine Antwort.

Das wäre eine Möglichkeit aber bezieht sich die auslassen.txt nicht auf alle Varrianten von Namen.

Maik Phillips - Titel.epub
Susan Elizabeth Phillips - Titel.epub

Wenn der Name Phillips in der auslassen.txt ist, dann werden doch alle Dateien übersprungen
die den Namen Phillips enthalten. Oder verstehe ich das falsch?
Wenn ja wäre es nicht so gut weil Maik Phillips besteht aus einem Vornamen und einem Nachnamen
und bei diesen Namen würde das Script funktionieren.
Aber was mir helfen könnte, wenn alle Dateien die mehr wie 2 Leerzeichen bis zum 1. Bindestrich haben
verschoben werden. Damit kann ich alles ausfiltern was ich händisch bearbeiten muß.

Vielen Dank für deine tolle Unterstützung.

Mfg Tommylik
Member: batchnewbie
batchnewbie Apr 25, 2016 updated at 15:49:18 (UTC)
Goto Top
Hi,
ja, du liegst da richtig, wenn Phillips in einer filter datei drin ist, dann werden selbsverständlich alle Dateinamen die ein Phillips drin haben, gefiltert.

So, ich hab mir das alles jetzt noch mal angeschaut und bin zum dem Schluss gekommen, dass man es besser in Teilen verarbeiten sollte. Zuerst werden dreistellige Namen (Jennifer L. Armentrout - Titel.epub), dann zweistellige Namen (Adams Melody - Titel.epub) nach deinem Muster "normalisiert", anschließen wird das ganze verschoben.
Das ganze sieht dann so aus:
@echo off & setlocal enabledelayedexpansion & title %~n0
cls

REM Verzeichnisse angeben
set "Verzeichnis=%~dp0"  
set "Typ=*.epub"  
set "ZielVerzeichnis=%Verzeichnis%Autoren\"  
set "Backup=%Verzeichnis%Backup.txt  

pushd %Verzeichnis% || goto :eof
dir /b /a-d "*.epub">%Backup%  

REM dreistellige Namen
set "Suchstring=?* ?* ?*-"  
for /f "delims=" %%i in ('dir /b /a-d "%Suchstring%%Typ%"') do (  
    for /f "tokens=1,2,3*" %%j in ("%%i") do (  
        echo Aus: "%%i" Zu: "%%l, %%j %%k %%m"  
        echo ren "%%i" "%%l, %%j %%k %%m"  
        echo.
    )
)
echo wir legen eine Pause ein
echo.
pause>nul

REM zweistellige Namen
set "Suchstring=?* ?*-"  
for /f "delims=" %%i in ('dir /b /a-d "%Suchstring%%Typ%"^|findstr /V "\,"') do (  
    for /f "tokens=1,2*" %%j in ("%%i") do (  
        echo Aus: "%%i" Zu: "%%k, %%j %%l"  
        echo ren "%%i" "%%k, %%j %%l"  
        echo.
    )
)
echo wir legen eine Pause ein
echo.
pause>nul

REM Dateinamen ins vorgegebenen Verzeichnis verschieben
REM ein , muss in Dateinamen vorhanden sein
set "Suchstring=*,"  
for /f "delims=" %%i in ('dir /b /a-d "%Suchstring%%Typ%"') do (  
    set "Datei=%%i"  
    set "Datei=!Datei: - =#!"  
    for /f "delims=# tokens=1" %%j in ("!Datei!") do (  
        set "DateiName=%%j"  
        echo Erstelle: "!DateiName!"  
        echo md "%ZielVerzeichnis%!Dateiname!" 2>nul  
        echo move "%%i" "%ZielVerzeichnis%!Dateiname!"  
        echo.
     )
)
pause>nul
Ich habe das ganze lediglich mit:
  • Aus: "Aiken L. Roy - Titel.epub" Zu: "Roy, Aiken L. - Titel.epub"
  • Aus: "Jennifer L. Armentrout - Titel.epub" Zu: "Armentrout, Jennifer L. - Titel.epub"
  • Aus: "Salis-Seewis Johann Gaudenz von - Titel.epub" Zu: "Gaudenz, Salis-Seewis Johann von - Titel.epub"
  • Aus: "Scotch Winn Allison - Titel.epub" Zu: "Allison, Scotch Winn - Titel.epub"
  • Aus: "Susan Elizabeth Phillips - Titel.epub" Zu: "Phillips, Susan Elizabeth - Titel.epub"
  • Aus: "T. C. Boyle - Titel.epub" Zu: "Boyle, T. C. - Titel.epub"
  • Aus: "Adam Nevill - Der letzte Tag.epub" Zu: "Nevill, Adam - Der letzte Tag.epub"
  • Aus: "Adams Melody - Titel.epub" Zu: "Melody, Adams - Titel.epub"
  • Aus: "Haas Wolf - Titel.epub" Zu: "Wolf, Haas - Titel.epub"
  • Aus: "Maik Phillips - Titel.epub" Zu: "Phillips, Maik - Titel.epub"
  • Aus: "Saint-Saens Charles-Camille - Titel.epub" Zu: "Charles-Camille, Saint-Saens - Titel.epub"
getestet.

Problem sehe ich bei Namen wie Johann Wolfgang von Goethe (wenn es überhaupt ein Problem ist!) den das wird zu Goethe, Johann Wolfgang von.
Ich weiß nicht wie da die Formatierung aussehen soll, von Goethe, ... oder Goethe, ...

Gegenbefalls muss du noch eine weitere for /f Schleife davor setzten, die solchen Namen richtig filtert und zerlegt.
for /f "delims=" %%i in ('dir /b /a-d "*von*.epub"') do   
Das könnte (wird) jedoch mit der dreistelligen Schliefe kollidieren, man könnte diese Dateien zuerst z. B. in ein Von Verzeichnis verschieben und später extra verarbeiten, die Möglichkeiten sind da vielfältig.

wie immer nicht vergessen es scharf zu stellen face-wink
Schöne Grüße

Nachtrag: Vierstellige Namen wie Ernst Theodor Amadeus Hoffmann oder John Ronald Reuel Tolkien werden falsch zerlegt, da muss du noch eine weitere for /f Schleife davor stellen, die vierstellig filtert und diese Namen richtig zerlegt, orientieren kannst du dich da an der dreistelligen und zweistelligen for /f Schleife face-smile
Member: Tommylik
Tommylik Apr 25, 2016 at 15:46:48 (UTC)
Goto Top
Hallo batchnewbie,

Vielen Dank für deine tolle Arbeit und Hilfe.

Ich habe dein neues Script laufen lassen.

Und habe festgestellt das das Script wegen den Dateinamen noch nicht richtig läuft.

Ich habe eben diesen Dateinamen zwischen vielen Dateien mit 2 Namen und mit 3 Namen gehabt:

"Isabell Schmitt-Egner - Habitat - im Toedlichen Gehege.epub" daraus wurde zu >> "-, Isabell Schmitt-Egner Habitat - im Toedlichen Gehege.epub"

Dann habe ich den Bindestrich zwischen "Habitat" und "im" entfernt.

"Isabell Schmitt-Egner - Habitat im Toedlichen Gehege.epub"

und siehe da die Datei wird vom Script ignoriert. Ich kann aber dagen nichts machen die Dateien habe ich so bekommen.
Ab und zu haben die Titel noch einen 2. Bindestrich.

Ist es möglich das das Script wegen dem 2. Bindestrich nicht richtig funktioniert? Kann man dem Script nicht sagen
alles was nach dem 1 Bindestrich kommt ist uninteressant.

Vielen Dank für alles.

Mfg Tommylik
Member: batchnewbie
batchnewbie Apr 25, 2016 updated at 18:51:12 (UTC)
Goto Top
Hi,
ja das ist ein Problem.

Meine Meinung nach wird das sehr schwierig jede Möglichkeit per batch abzufangen.

Ich habe das jetzt noch mal etwas erweitert bzw. angepasst, jetzt wird dein Fall ignoriert.
@echo off & setlocal enabledelayedexpansion & title %~n0
cls

set "Verzeichnis=%~dp0"  
set "Typ=*.epub"  
set "ZielVerzeichnis=%Verzeichnis%Autoren\"  
set "Liste=%Verzeichnis%Liste.txt  

pushd %Verzeichnis% || goto :eof
dir /b /a-d "*.epub">%Liste%  

REM vierstellige Namen, Dateinamen die ein 'von' enthalten werden gefiltert   
set "Suchstring=?* ?* ?* ?*-"  
for /f "delims=" %%i in ('dir /b /a-d "%Suchstring%%Typ%"^|findstr /v /r "von"^|findstr /v /r "[A-Z]-[A-Z]"') do (  
    for /f "tokens=1,2,3,4*" %%j in ("%%i") do (  
        echo Von: "%%i" Zu: "%%m, %%j %%k %%l %%n"  
        echo ren "%%i" "%%m, %%j %%k %%l %%n"  
        echo.
    )
)
echo wir legen eine Pause ein
echo.
pause>nul

REM dreistellige Namen, Dateinamen mit einem ',' und die ein 'von' enthalten werden gefiltert   
set "Suchstring=?* ?* ?*-"  
for /f "delims=" %%i in ('dir /b /a-d "%Suchstring%%Typ%"^|findstr /V "\,"^|findstr /v /r "von"^|findstr /v /r "[A-Z]-[A-Z]"') do (  
    for /f "tokens=1,2,3*" %%j in ("%%i") do (  
        echo Von: "%%i" Zu: "%%l, %%j %%k %%m"  
        echo ren "%%i" "%%l, %%j %%k %%m"  
        echo.
    )
)
echo wir legen eine Pause ein
echo.
pause>nul

REM zweistellige Namen, Dataeinamen mit einem ',' und die ein 'von' enthalten werden gefiltert   
set "Suchstring=?* ?*-"  
for /f "delims=" %%i in ('dir /b /a-d "%Suchstring%%Typ%"^|findstr /V "\,"^|findstr /v /r "von"^|findstr /v /r "[A-Z]-[A-Z]"') do (  
    for /f "tokens=1,2*" %%j in ("%%i") do (  
        echo Von: "%%i" Zu: "%%k, %%j %%l"  
        echo ren "%%i" "%%k, %%j %%l"  
        echo.
    )
)
echo wir legen eine Pause ein
echo.
pause>nul

REM Dateinamen ins vorgegebenen Verzeichnis verschieben
REM ein , muss in Dateinamen vorhanden sein
set "Suchstring=*,"  
for /f "delims=" %%i in ('dir /b /a-d "%Suchstring%%Typ%"') do (  
    set "Datei=%%i"  
    set "Datei=!Datei: - =#!"  
    for /f "delims=# tokens=1" %%j in ("!Datei!") do (  
        set "DateiName=%%j"  
        echo Erstelle: "!DateiName!"  
        echo md "%ZielVerzeichnis%!Dateiname!" 2>nul  
        echo move "%%i" "%ZielVerzeichnis%!Dateiname!"  
        echo.
     )
)
pause>nul
Dateien wie Johann Wolfgang von Goethe - Titel.epub oder Salis-Seewis Johann Gaudenz von - Titel.epub werden mit dem Script ignoriert, weil ein 'von' im Dateinamen vorliegt und das Script es weg filtert.

Dateinamen wie:
  • Isabell Schmitt-Egner - Habitat - im Toedlichen Gehege.epub
  • Saint-Saens Charles-Camille - Titel.epub
werden ignoriert, um das abzustellen muss du ^|findstr /v /r "[A-Z]-[A-Z]" in der Schleife entfernen.

Das gleiche gilt für:
  • Salis-Seewis Johann Gaudenz von - Titel.epub
  • Johann Wolfgang von Goethe - Titel.epub
möchtest du diese Dateinamen auch verarbeiten, muss du ^|findstr /v /r "von" in der Schleife entfernen.

wie immer nicht vergessen es scharf zu stellen ;)

Nachtrag: angepasst face-wink

Mit freundlichen Grüßen
Member: Tommylik
Tommylik Apr 26, 2016 at 02:17:03 (UTC)
Goto Top
Hallo batchnewbie,

Vielen Dank für deine Mühe und Zeit.

Ich bin einiges am ausprobieren und testen und würde gerne wissen wie man am einfachsten
z.B. von dieser Datei :
Gabriele Keiser - Franca Mazzari 02 - Gartenschläfer.epub
nur den 2. Bindestrich entfernen kann oder durch ein Leerzeichen ersetzen??

und von dieser Datei:
F. Paul Wilson - Widersacher - Zyklus 01 - das Kastell.epub
den 2. und den 3. Bindestrich.

Vielen Dank für deine grandiose Hilfe.

Mfg Tommylik
Mitglied: 114757
114757 Apr 26, 2016 updated at 05:23:36 (UTC)
Goto Top
Leude, warum macht ihr es euch so kompliziert und lest den Autor und Titel nicht direkt aus der ePub informations-Datei aus ?? Dort stehen die Infos schön getrennt in der XML-Datei content.opf drin, das ePub ist nämlich in der Struktur ein ZIP-File. Wie das geht hatten wir gerade erst hier.
Lösung gesucht: aus epub METADATA title leeren. eBookReader soll dadurch nach Dateinamen sortieren bzw. diese anzeigen

Und mit Regex und Powershell ist das zerlegen dann ein Kinderspiel, s. Erläuterungen oben.
Member: batchnewbie
batchnewbie Apr 26, 2016 at 13:53:00 (UTC)
Goto Top
Hi,
damit bekommst du den zweiten und dritten " - " weg. Erklärung habe ich jeweils dazu gelegt.
@echo off & setlocal enabledelayedexpansion
cls

set "Verzeichnis=%~dp0"  
set "Typ=*.epub"  

pushd %Verzeichnis% || goto :eof
set "Suchstring=?*-?*-?*"  
for /f "delims=" %%i in ('dir /b /a-d "%Suchstring%%Typ%"^|findstr /V "\,"') do (  
    set "Dateiname=%%i"  
    
    REM zum Testen sind echos an jeder Stelle vorhanden
    REM damit kannst du mein Gedankengang nachvollziehen
    echo Org. Dateiname: !Dateiname!
    
    REM Hier werden alle " - " zu # umgewandelt (ohne "" versteht sich)  
    REM notwendig um später die Teile zu extrahieren! Mit " - " kann man  
    REM schlecht arbeiten ;-)
    set "Dateiname=!Dateiname: - =#!"  
    echo Dateiname ohne " - " !Dateiname!  
    
    REM hier wird der erste Teilstück (Token) aus dem Dateiname (%%i)
    REM bis zu erste # extrahiert und zu Namen geformt
    for /f "tokens=1* delims=#" %%a in ("!Dateiname!") do (  
        set "Name=%%a"  
        echo nur Name: !Name!
    )
    
    REM Hier wird der zweite, dritte und vierte Teil bis anschließend
    REM Ende aus dem Dateiname (%%i) extrahiert und wieder zusammen gesetzt 
    REM das ganze ergibt dann den Titel, Teilstück immer bis nächste # 
    for /f "tokens=2,3,4* delims=#" %%e in ("!Dateiname!") do (  
        set "Titel=%%e %%f %%g"  
        echo nur Titel: !Titel!
    )
    
    REM Hier wird der Teilstück Name und Teilstück Titel zusammen gefügt,
    REM das ganze ergibt dann, den neuen Dateinamen inq. der Endung .epub
    REM der Bin­de­strich müssen jetzt noch einfügt werden, da alle # weg sind
    set "DateiNa=!Name! - !Titel!"  
    echo Zusammengesetzt: "!DateiNa!"  
    echo.

    REM hier wird umbenannt
    echo ren "%%i" "!DateiNa!"  
    echo.---------
)
pause>nul
getstet mit:
  • aus F. Paul Wilson - Widersacher - Zyklus 01 - das Kastell.epub wird F. Paul Wilson - Widersacher Zyklus 01 das Kastell.epub
  • aus Gabriele Keiser - Franca Mazzari 02 - Gartenschläfer.epub wird Gabriele Keiser - Franca Mazzari 02 Gartenschläfer.epub
  • aus Isabell Schmitt-Egner - Habitat - im Toedlichen Gehege.epub wird Isabell Schmitt-Egner - Habitat im Toedlichen Gehege.epub

wie immer nicht vergessen es scharf zu stellen ;)

@114757 viele Wege führen nach Rom face-wink

mfg
Member: Tommylik
Tommylik Apr 27, 2016 at 07:59:39 (UTC)
Goto Top
Hallo batchnewbie,

Vielen Dank super Arbeit von dir.

Ich versuche für findstr ein Errorlevel einzubauen wenn er nichts findet.

Da die Anzeige für die Pause mit >nul unterdrückt ist habe ich ein schwarzes CMD Fenster.

for /f "delims=" %%i in ('dir /b /a-d "%Suchstring%%Typ%"^|findstr /V "\,"') do (   

if errorlevel 1 (echo %%i Fehler) else (echo %%i OK)  

oder 

if !errorlevel! neq 0 (echo %%i Fehler) else (echo %%i OK) 

set "Dateiname=%%i"   

...
...

Könntest du mir bitte sagen was falsch ist? Oder ist es so nicht möglich?

Vielen Dank für deine tolle Hilfe.

Mfg Tommylik
Mitglied: 114757
114757 Apr 27, 2016 updated at 08:06:36 (UTC)
Goto Top
Vor die Schleife setzen
dir /b /a-d "%Suchstring%%Typ%" | findstr /V "\," >nul 2>&1 || echo Nichts gefunden  
Member: Tommylik
Tommylik Apr 27, 2016 at 11:08:01 (UTC)
Goto Top
Hallo Jodel32,

Vielen Dank für die Antwort. Funktioniert bestens.

Ich habe jetzt noch ein Problem mit Buchtiteln die am Ende ein Ausrufungszeichen haben.

z.B.
Alves, Katja - Der Muffin - Club 02 - Vier Freundinnen wirbeln los!.epub

Dann bekomme ich Syntaxfehler gemeldet.

Lösche ich das Zeichen weg funktioniert alles bestens.

Das ist aber mühselig alle Dateien vorher zu kontrollieren.

Wie kann ich am besten alle Ausrufungszeichen aus den Dateinamen raus löschen?

Oder kann ich sie hiermit wenigstens Filtern?
^|findstr /V "\!"  

Gleich raus löschen wäre mir lieber, dann brauche ich sie nicht nacharbeiten.
Und entfernt werden müssen sie sowieso. Oder??

Vielen Dank für Eure hilfe.

Mfg Tommylik
Member: batchnewbie
batchnewbie Apr 27, 2016 updated at 15:02:47 (UTC)
Goto Top
Hi,
nun da gibt es viele Möglichkeiten face-wink

Man könnte es per for /f Schleife entfernen lassen:
@echo off & setlocal enabledelayedexpansion
cls
set "dname=das ist nur ein test!"  
for /f "delims=!" %%i in ("!dname!") do echo ausgabe: %%i  
Man holt den ersten Token bis Ausrufungszeichen und da es das letzte Zeichen ist, sollte es passen face-wink

Man könnte es auch einfach mit nichts ersetzten:
@echo off & setlocal enabledelayedexpansion
cls
set "dname=das ist nur ein test!"  
set name=!dname:'!'=!  
echo Name: !name!
Der Ausrufungszeichen muss in ' ' rein sonst funktioniert es nicht.
Funktioniert auch wenn andere Zeichen noch dahinter stehen.

Man könnte auch das letzte Zeichen abschneiden, sofern es ein Ausrufungszeichen ist, zu viel arbeit face-wink

Mit freundlichen Grüßen
Member: Tommylik
Tommylik Apr 27, 2016 at 16:12:38 (UTC)
Goto Top
Hallo batchnewbie,

Vielen Dank für deine Antwort.

Ich bin jetzt ein bisschen verwirrt.

Das erste Beispiel ist mir klar. Es wird vom Dateinamen alles eingelesen bis auf das Ausrufungszeichen.

Beim 2. Beispiel erkenne ich nicht wo das Ausrufungszeichen mit "Nichts" ersetzt wird.

Und was mich richtig irritiert ist das die Variablen in Ausrufungszeichen stehen. Warum?

("!dname!")  

Zufall? Bei 2 unterschiedlichen Beispielen

set name=!dname:'!'=!   

echo Name: !name!

Vielen Dank für deine Hilfe

Mfg Tommylik
Member: batchnewbie
batchnewbie Apr 27, 2016 updated at 16:58:58 (UTC)
Goto Top
Hi,
nein es ist kein Zufall, du kannst es natürlich auch mit Prozenten als %variable% machen, nur wird das in einer verschachtelten Schleife nicht funktionieren, dafür brauchst du "setlocal enabledelayedexpansion" und da stehen variable in Ausrufungszeichen anstatt Prozenten.
Ich habe es so gemacht damit du es gleich in dein Script einbauen kannst.

Hier ein ganz einfaches Bsp.:
@echo off
set "string=das ist nur ein test!"  
set string=%string:!=%
echo %string%
pause
Zeile 3 tauscht ! mit nichts, weil hinter Gleichheitszeichen kein Zeichen angegeben ist.

Hätte man z.B. set variable=%variable:!=#%, dann wurde Ausrufezeichen mit Rautezeichen (oder halt einem anderen Zeichen) ersetzt.

In dem oberen Script verwende ich set "Dateiname=!Dateiname: - =#!" hier wird Leerzeichen Bindestrich Leerzeichen durch Rautezeichen ersetzt face-smile

Tutorial zur FOR-Schleife
Mit freundlichen Grüßen
Member: Tommylik
Tommylik Apr 28, 2016 at 01:27:00 (UTC)
Goto Top
Hallo batchnewbie,

Vielen Dank für die Erklärungen und das Tutorial.

Ich habe folgendes ausprobiert in einer separaten cmd-Datei und mit einer Datei im Verzeichnis.
Ih hab es nicht geschaft das das Ausrufezeichen am Ende entfernt wird.
Ich bekomme am Ende einen Syntaxfehler gemeldet. Ich weiß aber nicht warum.

@echo off & setlocal enabledelayedexpansion & title %~n0 
cls

set "QuellVerzeichnis=%~dp0"  
set "Typ=*.epub"  

pushd %QuellVerzeichnis% || goto :eof

for /f "delims=" %%i in ('dir /b /a-d "%Suchstring%%Typ%"^|findstr /V "\,"') do (  
    
	set "dname=%%i"  
	echo Der Orginale Dateiname sieht so aus:	!dname!
	echo.
	echo.
	echo.
	set name=!dname:'!'=!  
	echo Ohne die Ausrufezeichen :	!name!
	echo.
	echo.
	echo.
	
	ren "%%i" "!name!"	  
)

pause>nul

Vielen Dank nochmal für Eure Hilfe.

Mfg Tommylik
Member: batchnewbie
batchnewbie Apr 28, 2016 at 11:27:21 (UTC)
Goto Top
Hi,
ich denke es liegt an den Ausrufezeichen, sie werden gar nicht verarbeitet, wenn sie in einem Dateinamen vorhanden sind, deshalb der Syntaxfehler (ich nehme es an!).
Nur wieso, weshalb das so ist, dafür bin ich viel zu viel ein Laie, dass ich dir das erklären könnte.

Wegen DelayedExpansion hier eine sehr informative Antwort dazu, vielleicht hilft es dir ein wenig.
Mitglied: 114757
Solution 114757 Apr 28, 2016 updated at 11:46:23 (UTC)
Goto Top
Du musst es nur escapen weil es sonst von der verzögerten Variablenerweiterung gefressen wird.
set "name=!dname:^^!=!"
http://www.robvanderwoude.com/escapechars.php

Gruß jodel32
Member: Tommylik
Tommylik Apr 28, 2016 at 13:52:30 (UTC)
Goto Top
Hallo,

Vielen Dank für Eure Antworten.

Ich habe das mit dem Escapen ausprobiert.
Der Syntaxfehler bleibt.

Ich bin der Meinung das das Problem schon bei der For - Schleife ist.
Das beim einlesen der Dateien das Ausrufezeichen nicht erkannt wird.

Das Ausrufezeichen macht auch Probleme beim erstellen der Ordner. Wenn der Ordner erstellt wird fehlt immer der letzte Buchstabe.

Ich hoffe es ist möglich das man das mit batch in den Griff bekommen kann.
Es wäre für mich ärgerlich wenn ich das mit einem Zusätzlichen Tool überarbeiten müsste.

Vielen Dank nochmal für eure Hilfe.

Mfg Tommylik
Mitglied: 114757
114757 Apr 28, 2016 updated at 14:47:45 (UTC)
Goto Top
@echo off
set "QuellVerzeichnis=%~dp0"  
powershell -Executionpolicy ByPass -Command "gci '%quellverzeichnis%*.epub' | ?{$_.Name -match '!' -and $_.Name -notmatch ','} | rename-item -NewName {$_.name.replace('!','')} -Force"  
Member: Tommylik
Tommylik Apr 28, 2016 at 16:34:32 (UTC)
Goto Top
Hallo jodel32,

Vielen Dank für deine Antwort und Hilfe.

Benötige ich dafür Powershell?

Wenn ja dann kann ich es nicht nutzen. Ich habe kein Zugriff auf Powershell.

Wenn es als cmd ausgeführt werden soll dann ist irgendwas am Script nicht in Ordnung. Ich bekomme in roter Schrift angezeigt das irgendwas mit dem command Befehl nicht in Ordnung ist.

Vielen Dank für alles.

Mfg Tommylik
Mitglied: 114757
114757 Apr 28, 2016 updated at 18:30:19 (UTC)
Goto Top
Zitat von @Tommylik:
Benötige ich dafür Powershell?
Ja
Wenn ja dann kann ich es nicht nutzen. Ich habe kein Zugriff auf Powershell.
Du armer. Verstehe die Admins nicht, da lassen sie die Jungs mit VBS und Batch skripten obwohl sich damit genau so viel böses anstellen lässt.
Ich bekomme in roter Schrift angezeigt das irgendwas mit dem command Befehl nicht in Ordnung ist.
Ja das bekommst du wenn bei euch die Powershell deaktiviert wurde.
Member: Tommylik
Tommylik Apr 29, 2016 at 00:51:34 (UTC)
Goto Top
Hallo jodel32,

Falls ich das mit Powershell und meinem Armin geregelt bekomme,
was muss ich mit dem Script genau machen?
Kann ich es auch mit einem Doppelklick starten?

Falls nicht gehe ich davon aus das es keine Möglichkeit mit Batch gibt. Sonst hättest du ja auch nicht Powershell vorgeschlagen.

Vielen Dank für deine Hilfe.

Mfg Tommylik
Member: Tommylik
Tommylik Apr 29, 2016 at 03:48:18 (UTC)
Goto Top
Hallo,

Mit dem folgenden Schnipsel habe ich es hinbekommen das das Ausrufezeichen mit eingelesen.

@echo oft & setlocal
Disabledelayedexpansion
cls

set "QuellVerzeichnis=%~dp0"  
set "Typ=*.epub"  

pushd %QuellVerzeichnis% || goto :eof

for /f "delims=" %%i in ('dir /b /a-d "%Suchstring%%Typ%"^|findstr /V "\,"') do (  
    
	set "dname=%%i"  
        Setlocal enabledelayedexpansion
	echo Der Orginale Dateiname sieht so aus:	!dname!
)
Pause>nul

Jetzt fehlt noch das entfernen.

Mfg Tommylik
Mitglied: 114757
114757 Apr 29, 2016 updated at 06:36:03 (UTC)
Goto Top
Zitat von @Tommylik:
was muss ich mit dem Script genau machen?
Gar nüscht, läuft direkt in einer normalen Batch out-of-the-box

Mit Batch gebe ich mich bei solchen Aufgabe gar nicht mehr ab, PS ist da einfach zuverlässiger in der Hinsicht., aber viele sind einfach zu bequem mal eine zukunftsfähige Skriptsprache zu lernen. Batch ist tot und gehört mit seine diversen Bugs und nicht zu Ende gedachten Features endlich in den Ruhestand geschickt...
Member: Tommylik
Tommylik Apr 29, 2016 at 14:43:32 (UTC)
Goto Top
Hallo jodel32,

Ich habe jetzt zugriff auf PS.

Ich habe nun da ich ja mich nicht auskenne dein Script als cmd Datei abgespeichert und ein Doppelklick drauf gemacht. Es hat sich die Windows Powershell geöffnet.

Mehr ist nicht passiert. Muss ich jetzt noch was machen?
Die Dateien mit dem Ausrufezeichen am Ende des Dateinamen sind unverändert.

Vielen Dank für deine Hilfe.

Mfg Tommylik
Mitglied: 114757
114757 Apr 29, 2016 updated at 19:31:43 (UTC)
Goto Top
Zitat von @Tommylik:
Ich habe nun da ich ja mich nicht auskenne dein Script als cmd Datei abgespeichert und ein Doppelklick drauf gemacht. Es hat sich die Windows Powershell geöffnet.

Mehr ist nicht passiert. Muss ich jetzt noch was machen?
  • Befindet sich die cmd direkt im Ordner der *.epub Dateien ? Das wird ja durch die Variable festgelegt.
  • Wurde die Execution-Policy in einer Admin-Konsole angepasst Set-Executionpolicy RemoteSigned ?
https://www.windowspro.de/andreas-kroschel/powershell-scripts-ausfuehren

Wenn das beachtet wurde geht das einwandfrei, getestet!

Ansonsten greift die Freischaltung der Policy bei dir noch nicht.

p.s. Das Skript gibt keine Infos aus.
Zum Debugging kannst du aber den Verbose-Parameter hinzufügen:
@echo off
set "QuellVerzeichnis=%~dp0"  
powershell -Executionpolicy ByPass -Command "gci '%quellverzeichnis%*.epub' | ?{$_.Name -match '!' -and $_.Name -notmatch ','} | rename-item -NewName {$_.name.replace('!','')} -verbose -Force"  
pause
Member: Tommylik
Tommylik Apr 30, 2016 at 05:30:53 (UTC)
Goto Top
Hallo jodel32,

Vielen Dank für deine Antwort und Hilfe.

Funktioniert bestens.

Ich wollte jetzt mal wissen was dein Script genau macht. Was bedeutet das Komma in dem Script.? Soll das Script Dateien auslassen die ein Komma enthalten? Du weißt ja ich habe von PS noch keine Ahnung. Ich denke am besten lernt man von Scripten die funktionieren und und von dem man weiß was sie machen.

Falls ich mit meiner Annahme mit Komma in deinem Script Recht habe, hätte ich eine Bitte. Könntest du das Script bitte so abändern das es alle diese Sonderzeichen entfernt. &()/_!?., Aber es dürfen keine Bindestriche entfernt werden.
Das soll in meinem Script die erste Aktion sein was das Script machen soll.
Du hast Recht PS ist echt genial und ich habe Keine Ahnung was man damit alles machen kann.

Vielen Dank nochmal für deine Hilfe.

Mfg Tommylik
Mitglied: 114757
114757 Apr 30, 2016 updated at 08:03:13 (UTC)
Goto Top
Also, die Zeile macht folgendes:

Das
powershell -Executionpolicy ByPass -Command ""  
ist in diesem Fall in einer Batch dazu da, den Powershell-Code zwischen den Anführungszeichen auszuführen.

Schritt 1:
gci ein Alias für Get-Childitem und holt sich die Liste der *.epub Dateien des aktuellen Verzeichnisses
gci '%quellverzeichnis%*.epub'  
Schritt 2:
Nun wird diese Liste per Pipe "|" an das nächste CMDLet ?{} übergeben. Dieses Konstrukt ist eine Abkürzung für where-object, also eine Funktion die bestimmte Dateien aus der Liste ausfiltert. Du könntest dieses CMDLet als IF-Abfrage interpretieren. In diesem Fall werden nur Dateien übernommen die ein Ausrufezeichen im Dateinamen haben und die kein Komma enthalten, das habe ich deinem obigen Skript so entnommen. Das $_ ist eine Variable mit der man die Dateien und deren Eigenschaften anspricht. Man könnte also z.B. auch die Größe einer Datei checken ($_.Length) usw.
?{$_.Name -match '!' -and $_.Name -notmatch ','}   
Schritt 3:
Die nun ausgefilterten Dateien benennen wir nun um und zwar indem wir dem Parameter -NewName den Ursprünglichen Dateinamen übergeben von welchem aber vorher noch das Ausrufezeichen durch nichts ersetzt wird. Das Verbose zeigt nur detailliert an was die PS macht. Das -Force erzwingt das Umbenennen falls eine Datei z.B. als ReadOnly markiert ist.
rename-item -NewName {$_.name.replace('!','')} -verbose -Force  
das war die ganze Magie face-smile

Um nun alle deine Sonderzeichen zu ersetzen werden wir das ganze um die Liste deiner Zeichen ergänzen und im Umbenennungsvorgang statt mit einem einfachen Replace mit einem Regular-Expressions-Replace arbeiten:
@echo off
set "QuellVerzeichnis=%~dp0"  
powershell -Executionpolicy ByPass -Command "gci '%quellverzeichnis%*.epub' | ?{$_.Name -match '[&\(\)/_!\?\[\]]' } | rename-item -NewName {$_.name -replace '[&\(\)/_!\?\[\]]',''} -verbose -Force"  
pause
Da wir hier in einem RegEx Ausdruck bestimmte Zeichen Sonderzeichen sind und somit spezielle Bedeutung haben müssen wir diese mit einem Backslash escapen.
 [&\(\)/_!\?\[\]]
Das öffnende [ und das Schließende ] bedeuten das irgendein Zeichen das darin enthalten ist, durch die Regex-Engine "gecaptured" wird. D.h. also wenn irgendeines dieser Zeichen in deinem Dateinamen vorkommt dieses entfernt wird.

Mehr zu Regular-Expressions kannst du auf diversen Internetseiten und Tutorials wie z.B. diesem nachlesen, denn das Thema ist sehr vielfältig.

So, ich hoffe das hat etwas Licht in die ganze Sache gebracht und hoffentlich auch deine Neugierde auf die PS geweckt face-wink, denn Dinge die in Batch teilweise Irre Verrenkungen erfordern sind damit in 90% der Fälle als Einzeiler zu bewerkstelligen.

Gruß jodel32
Member: Tommylik
Tommylik May 02, 2016 at 19:41:59 (UTC)
Goto Top
Hallo Jodel,

Vielen Dank für deine Erklärungen und für den Link.

Ich kann es dir leider nicht erklären woran es liegt.

Aber mit diesem Code:
powershell -Executionpolicy ByPass -Command "gci '%quellverzeichnis%*.epub' | ?{$_.Name -match '!' -and $_.Name -notmatch ','} | rename-item -NewName {$_.name.replace('!','')} -verbose -Force"   

Bekomme ich das Ausrufezeichen von folgender Datei weg.
Alves Katja - Der Muffin - Club 02 - Vier Freundinnen wirbeln los!.epub

Und von dieser Datei nicht.
Rudolf Glos G. - Netzwerke - (V)Dsl, Wlan, [Nas], Mediaplayer Und _Co!.epub

Dein Script mit allen Sonderzeichen macht bei beiden Dateien nichts.
Das Script läuft bis zur Pause direkt durch.

Trotz Verbose bekomme ich nichts gemeldet.

Muss der PS Code ein Einzeiler sein oder muss an bestimmten Stellen ein Umbruch sein?

Mfg Tommylik
Member: Tommylik
Tommylik May 02, 2016 at 20:40:19 (UTC)
Goto Top
Hallo,

Ich habe folgendes Script hier im Forum gefunden:


Dateinamen-String vor und nach einem bestimmten Zeichen Tauschen

@echo off & setlocal
set "QuellVerzeichnis=%~dp0"  
set "Typ=txt"  

for /f "delims=" %%i in ('dir /b /a-d  %quellverzeichnis%\*.epub') do for /f "tokens=1,2 delims=-" %%a in ("%%~ni") do set "Teil1=%%b" & set "Teil2=%%a" & call :ProcessFile "%Ordner%\%%i"  

pause
goto :eof

:ProcessFile
:Loop1
if "%Teil1:~,1%"==" " (set "Teil1=%Teil1:~1%" & goto :Loop1)  

:Loop2
if "%Teil2:~-1,1%"==" " (set "Teil2=%Teil2:~,-1%" & goto :Loop2)  

echo ren %1 "%Teil1% - %Teil2%%~x1"  
goto :eof

Das wolte ich gleich mal umsetzen mit fogender Beispieldatei.

Das Urteil - John Grisham.epub

Aber es passierte nichts. Kann es sein das die Leerzeichen in zwichen
den Namen der Autoren stören?

Vielen Dank im voraus.

Mfg Tommykli
Mitglied: 114757
114757 May 02, 2016 at 21:05:50 (UTC)
Goto Top
Zitat von @Tommylik:
Und von dieser Datei nicht.
Rudolf Glos G. - Netzwerke - (V)Dsl, Wlan, [Nas], Mediaplayer Und _Co!.epub
Kann ich absolut nicht nachvollziehen, geht hier mit beiden Skripten einwandfrei bei allen möglichen Kombinationen.

Muss der PS Code ein Einzeiler sein oder muss an bestimmten Stellen ein Umbruch sein?
Bei der Variante in der Batch muss es ein Einzeiler sein, und er läuft hier einwandfrei. Du solltest mal deine Powershell upgraden.

Ich bin jetzt hier raus, das wird mit jetzt echt zu blöd für diese Kinkerlitzchen so viel Zeit zu investieren, sorry.

Viel Erfolg noch.

Ciao jodel