Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Dateinamen ändern

Frage Entwicklung Batch & Shell

Mitglied: Thorsten90

Thorsten90 (Level 1) - Jetzt verbinden

21.07.2013, aktualisiert 13:47 Uhr, 2501 Aufrufe, 8 Kommentare, 1 Danke

Hallo

Ich habe eine Batch-Datei um Unterordner in einzelne rar-Archive zu packen:

01.
for /d %%i in ("%dir%\*") do ( 
02.
    for /d %%j in ("%%i") do ren "%%j\*.cbr" *.rar >NUL 2>&1 
03.
    for /d %%j in ("%%i\*") do rar a -r -o- -ep1 -inul "%%~dpj%%~nxi_-_%%~nxj.rar" "%%j" 
04.
    for /d %%j in ("%%i") do ren "%%j\*.rar" *.cbr >NUL 2>&1 
05.
    echo %%i verarbeitet 
06.
)
Der Name der rar ist dabei immer Ordner-Unterordner.rar.
Die Unterordner haben verschiedene Namen. Einige sind einfach nur (teils dezimale) Zahlen, andere enthalten Text, entweder in der Form text_zahl oder buchschabeZahl (direkt hintereinander, ohne Leerzeichen oder Unterstrich).

Um dies Archive weiter zu verarbeiten muss der Dateiname mit über einen Regulären Ausdruck verarbeitet werden. Allerdings funktioniert dies nicht, da die Zahl am Ende des Namens nicht richtig abgetrennt ist.

Kann man die Batch so anpassen, dass die Zahl (unschiedlich viele Ziffern, manche dezimal mit . ) durch einen zusätzlichen Bindestrich abgetrennt wird?

Grüße

ps: Der Name muss angeasst werden, bevor die rar-Datei erstellt wird, da die Batch später zum aktuallisieren erneut verwendet werden soll und die Archive sonst doppeerstellt werden würden.
Mitglied: Endoro
21.07.2013, aktualisiert um 15:35 Uhr
Hallo Thorsten,
etwas mehr Erklärung wär klasse. Ich seh' keine Zahlen (mag an der Hitze liegen)
lg
Bitte warten ..
Mitglied: Thorsten90
21.07.2013, aktualisiert um 15:59 Uhr
Hi

Mein Verzeichnis sieht so aus


Hauptverzeichnis
    1. Ordner_1
        1. Unterordner_1
        2. Unterordner_2
        3. Unterordner_3
        4. Ordner_1-Unterordner_1.rar
        5. Ordner_1-Unterordner_2.rar
        6. Ordner_1-Unterordner_3.rar
    2. Ordner_2
        1. Unterordner1
        2. Unterordner2
        3. Unterordner3
        4. Ordner_2-Unterordner1.rar
        5. Ordner_2-Unterordner2.rar
        6. Ordner 2-Unterordner3.rar
    3. Ornder_3
        1. Unterordner_1
        2. Unterordner_2
        3. Unterordner_3
        4. Ordner_3-Unterordner_1.rar
        5. Ordner_3-Unterordner_2.rar
        6. Ordner_3-Unterordner_3.rar


Dabei sind die Namen der Ordner und Unterordner verschieden lang, enthalten teilweise Unterstriche und auch Zahlen. Aber der Name der Unterordner endet immer mit ein Zahl. Diese Zahl ist teilweise dezimal, also sowas wie ...3.4 .ext . Auch die länge ist unterschiedlich, mal sind die Zahlen einstellig, mal zoder dreistellig, etc. Und wie im Ordner_2 gezeigt ist die Zahl auch nicht immer mit einem Unterstrich abgetrennt.

Und was ich gerne hätte ist vor dieser Zahl einen Bindestrich, der sie vom Rest trennt, damit ich den Dateinamen verarbeiten kann. Momentan erkennt der reguläre Ausdruck die Länge der Zahl nicht richtig und nimmt einige Ziffern zum davorstehenden Namen.
Bitte warten ..
Mitglied: Endoro
21.07.2013 um 17:43 Uhr
Zitat von Thorsten90:
Momentan erkennt der reguläre Ausdruck die Länge der Zahl nicht richtig und nimmt einige Ziffern zum
davorstehenden Namen.

Das ist ein merkwürdiger regulärer Ausdruck.
Also mit Regex ist die Trennung einer Zeichenkette an der Grenze Buchstabe/Ziffer eigentlich einfacher als mit Batch.
Könnte man dort ansetzen und den Regex-Ausdruck verbessern?

lg
Bitte warten ..
Mitglied: Thorsten90
21.07.2013 um 22:55 Uhr
Das war auch mein erster Gedanke. Die Dateien um die es geht, sind Comic-Archive. Die sollen dann mit dem Programm Calibre verwaltet werden. Das ist ein Programm um ebooks zu verwalten.

Der Ausdruck sieht so aus:

(?P<series>[^_]*)-(?P<title>[^_.]*)(?P<series_index>\d+.*)


Ich habe den Ausdruck ihn in vier Foren, die sich speziell mit Calibre beschäftigen, gepostet, da ich selber im Internet nichts gefunden habe, das hilft. Ohne die Trennung erkennt der Ausdruck nur zwei Ziffern und betrachtet den Rest als Teil des Titels. In den ver Foren habe ich bisher nur eie Antwort bekommen, die nicht funktioniert hat, daherdachte ich mir, ich versuche es mal über die Batch.
Bitte warten ..
Mitglied: Endoro
22.07.2013, aktualisiert um 00:49 Uhr
Die Calibre-Regex konnte ich nicht testen.
Deshalb ein Vorschlag mit sed:

>for /f "delims=" %a in ('dir /b/a-d/s *.rar') do @echo %~fa|sed -r "s/.*\\([^\]*[[:alpha:]_ -]+\.*)([0-9][0-9.]*.rar)$/echo ren \"^&\" \"\1-\2\"/e" 
ren "C:\Hauptverzeichnis\Ordner_1\Unterordner_1\Ordner_1-Unterordner 10.1.rar" "Ordner_1-Unterordner -10.1.rar" 
ren "C:\Hauptverzeichnis\Ordner_1\Unterordner_1\Ordner_1-Unterordner.10.1.rar" "Ordner_1-Unterordner.-10.1.rar" 
ren "C:\Hauptverzeichnis\Ordner_1\Unterordner_1\Ordner_1-Unterordner1.1.rar" "Ordner_1-Unterordner-1.1.rar" 
ren "C:\Hauptverzeichnis\Ordner_1\Unterordner_1\Ordner_1-Unterordner10.1.rar" "Ordner_1-Unterordner-10.1.rar" 
ren "C:\Hauptverzeichnis\Ordner_1\Unterordner_1\Ordner_1-Unterordner_1.rar" "Ordner_1-Unterordner_-1.rar" 
ren "C:\Hauptverzeichnis\Ordner_1\Unterordner_1\Ordner_1-Unterordner_10.1.rar" "Ordner_1-Unterordner_-10.1.rar" 
ren "C:\Hauptverzeichnis\Ordner_1\Unterordner_2\Ordner_1-Unterordner_2.rar" "Ordner_1-Unterordner_-2.rar" 
ren "C:\Hauptverzeichnis\Ordner_1\Unterordner_3\Ordner_1-Unterordner_3.rar" "Ordner_1-Unterordner_-3.rar" 
ren "C:\Hauptverzeichnis\Ordner_2\Unterordner1\Ordner_3-Unterordner1.rar" "Ordner_3-Unterordner-1.rar" 
ren "C:\Hauptverzeichnis\Ordner_2\Unterordner2\Ordner_2-Unterordner2.rar" "Ordner_2-Unterordner-2.rar" 
ren "C:\Hauptverzeichnis\Ordner_2\Unterordner3\Ordner_2-Unterordner3.rar" "Ordner_2-Unterordner-3.rar" 
ren "C:\Hauptverzeichnis\Ordner_3\Unterordner_1\Ordner_3-Unterordner_1.rar" "Ordner_3-Unterordner_-1.rar" 
ren "C:\Hauptverzeichnis\Ordner_3\Unterordner_2\Ordner_3-Unterordner_2.rar" "Ordner_3-Unterordner_-2.rar" 
ren "C:\Hauptverzeichnis\Ordner_3\Unterordner_3\Ordner_3-Unterordner_3.rar" "Ordner_3-Unterordner_-3.rar"
Je vielgestaltiger der Input desto komplizierter die Regex, um alles zu erfassen.
Bei all diesen Beispielen ist jedenfalls ein - vor der Zahl.

lg
Bitte warten ..
Mitglied: Thorsten90
22.07.2013, aktualisiert um 02:56 Uhr
Danke, aber um alle Verichnisse auszulisten sind es zu viele, dass, was ich angegeben habe, war nur das Muster.

Habe ne weile gesucht, aber ich denke, ich habe einen Lösungsansatz mittels stringmanipulation gefunden. Habe das Ganze etwas angepast, damit es für mein Problem passt. Zum testen habe ich diesen Code benutzt:

01.
@echo off 
02.
setlocal enabledelayedexpansion 
03.
set string=1123_bafgafg_fasdgasdg_1231_asdgag_asgasdfg_1311_c111.1.rar 
04.
set "findn=*_" 
05.
set "findc=*c" 
06.
for /l %%n in (1, 1, 15) do call set string=%%string:!findn!=%% 
07.
call set string=%%string:!findc!=%% 
08.
echo %string% 
09.
pause
Habe einfach irgenwas als string eingegeben, aber damit sollte alles abgedeckt sein. Er liefert, wie gewolt, nurnoch die Zahl am Ende.

Hab dann versucht, das ganze schrittweise in mein meinen Code zu integrieren. Der gedanke war, den Verzeichnisnamen in einer Variable zu speichern und anschließend die Variable zu verändern und zu übergeben, anstatt den Verzeichnisnamen direkt zu bergeben. Dazu wollte ich ersmal das übergeben an eine Variable testen:

01.
@echo off 
02.
setlocal enabledelayedexpansion 
03.
set dir= xyz 
04.
for /d %%i in ("%dir%\*") do ( 
05.
    for /d %%j in ("%%i\*") do ( 
06.
    set var=%%~nxj 
07.
    @echo %var% 
08.
09.
    echo %%i verarbeitet 
10.
11.
echo Fertig 
12.
pause
Aber ich bekomme nur "ECHO ist ausgschaltet" als Ausgbe, und solange ich nicht die korrekte Ausgabe habe, kann ich die manipulation nicht testen. Wo liegt mein Fehler?
Bitte warten ..
Mitglied: bastla
22.07.2013 um 07:38 Uhr
Hallo Thorsten90!

"delayedExpansion" nicht nur aktivieren, sondern auch verwenden:
echo !var!
Grüße
bastla
Bitte warten ..
Mitglied: Thorsten90
22.07.2013 um 08:43 Uhr
Hi

Vielen Dank, dass du mir wieder geholfen hast. Habe meine Batch damit angepasst und sie macht jetzt genau das, was sie soll. Mit den Dateinamen kann ich jetzt gut arbeiten.

Grüße
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Erkennung und -Abwehr
Lokale Virenprüfstation : Windows 10: Ändern von Einstellungen verhinden (5)

Frage von TryAndSolve zum Thema Erkennung und -Abwehr ...

Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Windows Server
gelöst Word 2010 : Absatz - Abstand per GPO ändern (3)

Frage von johanna-p zum Thema Windows Server ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (15)

Frage von liquidbase zum Thema Windows Update ...

DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...