Top-Themen

Aktuelle Themen (A bis Z)

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

Bash Ergebnis einer Wildcard ausgeben bzw. Speichern

Frage Entwicklung Batch & Shell

Mitglied: t.unselt

t.unselt (Level 1) - Jetzt verbinden

02.06.2013 um 21:38 Uhr, 2222 Aufrufe, 18 Kommentare

Hallo ihr Lieben,

ich versuche verzweifelt das Ergebnis einer Wildcard bzw Platzhalter auszugeben.
Hier ein Beispiel was ich meine.
Ich hab in einem Dateinamen einen variablen String auf den ich prüfe.

Original Dateiname: Date1nam3MitS03E09VielM1st.kram

Das einzige was immer gleich ist, ist ....S??E??....

Sprich nach dem "S" kommen 2 Ziffern und nach dem "E" kommen 2 Ziffern. Die 4 Platzhalter in dem Fall die Fragezeichen enthalten dann bestimmte Ziffern, die ich in einer Variable oder .txt-Datei brauche. Gerne auch noch mit dem "S" und "E".
Wunschergebnis: S04E07

Ich hoffe ich habe mein Problem genau darstellen können und danke schonmal im Voraus für eure Hilfe!

Mit freundlichen Grüßen
Thorsten
Mitglied: certifiedit.net
02.06.2013 um 22:25 Uhr
Hallo Thorsten,

probier es mal per regular expressions. Dürfte dir helfen die Dinge zu vereinfachen.

Grüße
Bitte warten ..
Mitglied: t.unselt
02.06.2013 um 22:32 Uhr
Vielen Dank für deine schnelle Antwort.
Ich werde mich gleich ein wenig darüber schlau machen.
Parallel ist mir noch ein weiterer Ansatz eingefallen, der vielleicht helfen könnte.
Wenn ich vor dem S??E?? ein Trennzeichen setzen könnte, könnte ich in der for-schleife mit tokens und delims arbeiten und so den teilstring rausholen.

Gibt es vielleicht eine Möglichkeit mit findstr über "S..E.." Trennzeichen vor oder nach dem Match zu setzen? Oder eine Alternative.

Ich werde mich weiter informieren und bin um jede Hilfe Dankbar.
Bitte warten ..
Mitglied: certifiedit.net
02.06.2013 um 22:37 Uhr
Hallo,

was ist denn das exakte Ziel?
Bitte warten ..
Mitglied: 64748
02.06.2013, aktualisiert um 22:47 Uhr
Guten Abend,

certifiedit hat oben schon richtig gesagt, dass man es mit Regulären Ausdrücken macht. Man muss also ein Werkzeug nehmen, welches solche beherrscht. Ich hab sed genommen. Der gesuchte Code wird zwischen Klammern () die mit Backslash escaped werden müssen "eingefangen", die Variable \1 im Ersetzungsausdruck enthält den eingefangenen Text.

variable=$(find . | sed -n 's/.*\(S[0-9][0-9]E[0-9][0-9]\).*/\1/p')
dann kannst Du Dir mit
echo $variable
den Inhalt der Variablen ansehen.

find durchsucht allerdings im obigen Code auch alle Unterverzeichnisse.

Markus
Bitte warten ..
Mitglied: t.unselt
02.06.2013 um 22:45 Uhr
Hi,

Wie bereits oben beschrieben. Ich muss aus einem Dateinamen mit der einzigen Information das der String "S??E??" immer gleich und einmalig ist die beiden Zahlen raus holen. Beide Zahlen haben ein Case von [01-30].

Der Rest des ganzen Dateinamens ist unwichtig. Mir geht es darum im Endeffekt eine Variable mit dem Beispielwert "S03E08" zu haben.

Grüße
Bitte warten ..
Mitglied: certifiedit.net
02.06.2013 um 22:49 Uhr
Hallo,

@64748: ich bin der Christian ;)

@t.unselt: Was soll denn das Endergebnis sein? Einfaches Dateiumbenennen? Dann mach dir das Leben nicht so schwer. Wie soll das ganze weiterverarbeitet werden, evtl lässt sich dafür eine sinnvollereLösung finden.

Grüße
Bitte warten ..
Mitglied: t.unselt
02.06.2013 um 22:55 Uhr
<code type=plain>variable=$(find . | sed -n 's/.*\(S[0-9][0-9]E[0-9][0-9]\).*/\1/p')

Hallo Markus. Das sieht sehr vielversprechend aus. Scheinbar habe ich es nicht deutlich gemacht, dass ich mich in einer cmd von Windows bewege.

Entschuldige. Gibt es dazu eine cmd-Analogie?
Bitte warten ..
Mitglied: t.unselt
02.06.2013 um 22:57 Uhr
@t.unselt: Was soll denn das Endergebnis sein? Einfaches Dateiumbenennen? Dann mach dir das Leben nicht so schwer. Wie soll das
ganze weiterverarbeitet werden, evtl lässt sich dafür eine sinnvollereLösung finden.

Im prinzip soll die Datei dann nur umbenannt werden.
Meines erachtens benötige ich vorher aber den jeweiligen String aus der Datei "S??E??"

Grüße
Bitte warten ..
Mitglied: certifiedit.net
02.06.2013 um 22:59 Uhr
Man könnte die Lösung schneller haben, wenn man sagt, was man will. Such mal nach dem Programm reNamer. Das macht das alles für dich.

Grüße
Bitte warten ..
Mitglied: 64748
02.06.2013 um 23:25 Uhr
Zitat von t.unselt:
Hallo Markus. Das sieht sehr vielversprechend aus. Scheinbar habe ich es nicht deutlich gemacht, dass ich mich in einer cmd von
Windows bewege.

Entschuldige. Gibt es dazu eine cmd-Analogie?
Also der Threadtitel sagt Bash. Ich hab also eine Lösung die unter Unix/Linux in der Shell funktioniert gepostet. Ausprobiert hab ich es allerdings in MobaXterm auf Windows. Wenn Du ein Script brauchst, welches mit Regulären Ausdrücken Dateien umbenennt, dann nimm das hier
01.
#!/usr/bin/perl 
02.
 
03.
use strict ; 
04.
use warnings ; 
05.
use feature 'say' ; 
06.
use File::Copy ; 
07.
  
08.
my ( $old, $new, $in, $op ) ; 
09.
$op = shift ; 
10.
foreach ( @ARGV ) { 
11.
    $old = $_ ; 
12.
    eval $op ; 
13.
    if ( $old ne $_ && -e $_ ) { 
14.
        say "Neuer Dateiname $_ bereits vorhanden. Überspringe $old!" ; 
15.
        next ; 
16.
17.
    move ( $old, $_ ) unless $old eq $_ ; 
18.
}
das ist ein Perlscript, Perl kannst Du auch auf Windows installieren. Ich benutze das Skript um mp3-Dateien umzubenennen. Bei mir heißt es rename.pl und würde so funktionieren
rename.pl 's/.*(S\d\dE\d\d).*/$1/' *.kram 
Ausgabe:
markus@samsung:~/datei$ touch Date1nam3MitS03E09VielM1st.kram 
markus@samsung:~/datei$ ls 
Date1nam3MitS03E09VielM1st.kram 
markus@samsung:~/datei$ rename.pl 's/.*(S\d\dE\d\d).*/$1/' *.kram  
markus@samsung:~/datei$ ls 
S03E09 
markus@samsung:~/datei$ 
Das geht auch unter Windows.

Markus
Bitte warten ..
Mitglied: 64748
02.06.2013 um 23:27 Uhr
Zitat von certifiedit.net:
Hallo,

@64748: ich bin der Christian ;)
Sorry, ich hatte den Namen Thorsten gesehen und den Fehler zu spät bemerkt.

Markus
Bitte warten ..
Mitglied: t.unselt
02.06.2013 um 23:46 Uhr
Ich werde es versuchen so deutlich zu schreiben wie möglich.

Ich habe eine Ansammlung von Serien. Die .avi´s liegen meist in Ordnern, welche den Seriennamen, Staffel, Episode und Episodennamen in einer unschönen Form haben. Diese Ordner liegen in eine Überorder z.B Staffel01, Staffel02...
Dieser Ordner liegt wiederum in einem Ordner des Seriennamens, auf dem mein Script angewendet wird.

Die Hierarchie sieht so aus:
J.A.G. - Im Auftrag der Ehre\S03\JAG.S03E04.Die.Sicht.der.Dinge.German.FS.DVDRip.XviD-iNSPiRED\isd-jagdxvid-s03e04.avi

Das Script soll folgendes tun (Anhand dieses Beispiels):
1. Ab "J.A.G. - Im Auftrag der Ehre" alle Unterordner durchsuchen und die AVI´s in einen neuen ORdner kopieren (funktioniert)
2. Im neuen Ordner die jeweilige Staffel und Episode ausfindig machen und die Datei ordentlich Bennen (funktioniert nicht)
So Soll es dann aussehen J.A.G - S03E04

3. Im Besten fall dann noch den Episodennamen " Die SIcht der Dinge" hinten dran hängen. Das ist aber erstmal zweitrangig.

Da ich nicht alle Serien immer mit Serienname.StaffelEpisode.Episodennamen habe, kann ich nicht mit Trennzeichen arbeiten, sondern muss innerhalb des Strings suchen, was es gibt.


Mein bisheriger Code:

FOR /F "delims=#" %%i IN ('dir /ad /b /s /a "%serienpfad%"') DO (
@copy "%%i" %serienpfad%\neu\
echo %%i>%serienpfad%\neu\tmp.txt
findstr "S[0-9][0-9]E[0-9][0-9]" "%serienpfad%\neu\tmp.txt"

)


Grüße
Bitte warten ..
Mitglied: certifiedit.net
02.06.2013 um 23:50 Uhr
Nimm reNamer, das sollte am schnellsten gehen. Da packst du alle gleich formatierten avis rein und in 2-3 Durchgängen hast du hunderte Daten ordentlich umbenannt.
Bitte warten ..
Mitglied: t.unselt
02.06.2013 um 23:56 Uhr
Ich dachte mir schon, dass es darauf hinauslaufen wird.
Es wäre mit Sicherheit die schnellere Lösung. Doch mittlerweile hat mich der Ehrgeiz gepackt und ich will wissen, ob es die CMD wirklich nicht umsetzen kann.

Grüße
Bitte warten ..
Mitglied: 64748
02.06.2013 um 23:57 Uhr
Ich habe mir die Hilfe zu findstr mal angesehen. Das was Du brauchst, nämlich die gefundene Zeichenkette wieder verwenden, das kann findstr nicht. Außerdem ist Batch nicht leistungsfähig genug für so eine Aufgabe.

Entweder Du machst es wie certifiedit schreibt mit dem richtigen Tool, also reNamer (was ich nicht kenne, macht aber nix ). Oder Du bootest mal mit einer Linux-Live-CD und machst es so wie oben beschrieben.

Alternative: benutze eine richtige Programmiersprache unter Windows, z.B. VB.

Markus
Bitte warten ..
Mitglied: Endoro
03.06.2013 um 01:02 Uhr
Hallo,

Zitat von 64748:
Ich habe mir die Hilfe zu findstr mal angesehen. Das was Du brauchst,
nämlich die gefundene Zeichenkette wieder verwenden, das kann findstr nicht. Außerdem ist Batch nicht
leistungsfähig genug für so eine Aufgabe.

Die erste Aussage stimmt, die zweite nicht

Wiedemauchsei @Thorsten du solltest mehr live-Dateinamen zum Testen posten. Nicht zwingend erforderlich aber sehr nützlich wäre es, wenn du dir GNU sed für Windows installieren würdest.

Gruss!
Bitte warten ..
Mitglied: t.unselt
03.06.2013 um 01:31 Uhr
Hallo Endoro,

vielen Dank für deine späte Antwort. Mitlerweile bin ich das ganze mit powershell am umsetzen.
Ich wollte eigentlich auf zusatztools etc. verzichten. Desshalb ist der renamer auch nichts für mich. Mit dem Sed würde ich mit (find . | sed -n 's/.*\(S[0-9][0-9]E[0-9][0-9]\).*/\1/p') vielleicht an mein Ziel kommen. Aber evtl. finde ich noch einen anderen Weg über cmd eigene Mittel, wo ich ganz anders ansetzen muss.

Grüße.
Bitte warten ..
Mitglied: Endoro
03.06.2013, aktualisiert um 09:06 Uhr
Hallo Thorsten,

hier mal ein Vorschlag für sed + Batch:
01.
@echo off &setlocal 
02.
set "videopath=c:\videopath" 
03.
set "destination=c:\new videopath" 
04.
for /f "delims=" %%i in ('dir /s/a-d/b "%videopath%\*.avi"^| findstr /ri "S[0-9][0-9]E[0-9][0-9]"') do ( 
05.
	for /f "delims=" %%a in ("%%~dpi.") do set "fdir=%%~nxa" 
06.
	set "fname=%%~fi" 
07.
	for /f "delims=" %%a in ('echo(%%~ni^|sed "s/.*\(S[0-9][0-9]E[0-9][0-9]\).*/\1/i"') do set "nname=%%a" 
08.
	setlocal enabledelayedexpansion 
09.
	for /f "tokens=1-6delims=." %%a in ("!fdir!") do set "nname=%%a-!nname!-%%c %%d %%e %%f%%~xi" 
10.
	echo move "!fname!" "%destination%\!nname!"  
11.
	endlocal 
12.
)
Gruss!
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Ergebnis in Text datei ausgeben
gelöst Frage von caschoplBatch & Shell2 Kommentare

Hallo, irgendwie stehe ich auf dem schlauch. Habe folgende Batch erstellt, aber der Text wier immer überschrieben. Das ergebnis ...

Batch & Shell
Bash Nur Zahlen ausgeben regex
gelöst Frage von MarabuntaBatch & Shell11 Kommentare

Hi, ich möchte einige Fehler mit case abfangen und divereses automatisieren. Trotz einem Regex Builder, Antworten auf ähnliche Fragen ...

Debian
Bash - String zwischen zwei Kommata ausgeben
gelöst Frage von plutowitschDebian3 Kommentare

Hallo, ich suche eine Möglichkeit wie ich einen String der zwischen zwei Kommata steht ausgeben kann. Das Problem ist, ...

Microsoft
Registry automatisch auslesen und das Ergebnis speichern
gelöst Frage von TutterMicrosoft11 Kommentare

Hallo an alle, ich suche eine Möglichkeit die Registry von mehreren PC´s auszulesen und ich möchte an einer bestimmten ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Necur-Botnet soll Erpressungstrojaner Scarab massenhaft verbreiten

Information von BassFishFox vor 34 MinutenErkennung und -Abwehr

12,5 Millionen Spam-Mails aus einem Bot-Netz mit 6 Millionen Computern? Eigentlich eine schwache Leistung. Die Erpresser setzen dabei auf ...

Microsoft

Nadeldrucker-Problem unter Windows - Microsoft liefert Updates

Information von BassFishFox vor 1 StundeMicrosoft

Hat ja nicht lange gedauert. Nachdem die November-Updates für Windows 7, 8.1 und 10 zahlreiche Nadeldrucker lahmgelegt hatten, stellt ...

Linux

Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde

Information von Frank vor 8 StundenLinux14 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 1 TagBatch & Shell9 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Heiß diskutierte Inhalte
Router & Routing
Zwei Netzwerke erstellen
Frage von bunteblumeRouter & Routing14 Kommentare

Hallo Zusammen, Ich möchte gerne ein backup von einem bestimmten Folder welcher auf dem Server regelmässig synchronisiert wird auf ...

Linux
Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde
Information von FrankLinux13 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Windows 10
Alle Programme mit bestimmtem Namen automatisch (per GPO) deinstallieren
gelöst Frage von lordofremixesWindows 1012 Kommentare

Hallo zusammen, gibt es eine Möglichkeit, alle Programme beginnend mit z.B. "Dell" im Namen per Script und somit per ...

Off Topic
Fachkräftemangel in Deutschland? - Talentschmiede schreibt alle 2 Tage die gleichen Stellen aus
Frage von Penny.CilinOff Topic12 Kommentare

Hallo, haben wir in Deutschland Fachkräftemangel? Die Talentschmiede schreibt gefühlt alle zwei Tage dieselben Stellen aus. Und das schon ...