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

Zeichenkette in Dateinamen erkennen.

Frage Entwicklung Batch & Shell

Mitglied: konrad123

konrad123 (Level 1) - Jetzt verbinden

15.06.2009, aktualisiert 19:51 Uhr, 3804 Aufrufe, 12 Kommentare

Ich bräuchte Hilfe bei der Erstellung eines Scripts bzw. ich finde den Fehler nicht.

Hallo,

ich habe mich an einigen Scripts versucht und komme nicht weiter.
Ich möchte aus einem Ordner und Unterordner Filmaufnahmen automatisch von dem Programm Comskip scannen lasse.
Dazu habe ich ein Script das mir nachschaut welche Dateien schon gescannt wurden.
for /F %%i in ('Dir F:\aufnahmen\card1\*.ts /b /s /a-d') do if not exist "%%~dpni.txt" "D:\comskip\sender.bat" "%%~fi"
Bei dem Sript wurde mir schon im Forum geholfen und das funktioniert wunderbar.

Nachdem das obere Script herausgefunden hat welche Dateien gescannt wurden, würde ich gerne schauen wie die Dateien gescannt werden sollen.
Dazu habe ich versucht dieses Script zu erstellen. Doch es funktioniert leider nicht und mir ist nicht so ganz klar warum.
sender.bat:

echo off
echo "%1"|find "RTL">NUL
if "%errorlevel%" equ "0" (
"i:\comskip\comskip.exe" --ini=i:\comskip\ChannelIni\RTL.ini --logo=i:\comskip\ChannelLogos\RTL.logo.txt %1
) else (
echo %1|find "Sat.1">NUL
if "%errorlevel%" equ "0" (
"i:\comskip\comskip.exe" --ini=i:\comskip\ChannelIni\sat1.ini --logo=i:\comskip\ChannelLogos\sat1.logo.txt %1
) else (
echo %1|find "RTL2">NUL
If "%errorlevel%" equ "0" (
"i:\comskip\comskip.exe" --ini=i:\comskip\ChannelIni\RTL2.ini --logo=i:\comskip\ChannelLogos\RTL2.logo.txt %1
) else (
echo %1|find "ZDF">NUL
if "%errorlevel%" equ "0" (
"i:\comskip\comskip.exe" --ini=i:\comskip\ChannelIni\ZDF.ini --logo=i:\comskip\ChannelLogos\ZDF.logo.txt %1
) else (
echo %1|find "Kabel">NUL
if "%errorlevel%" equ "0" (
"i:\comskip\comskip.exe" --ini=i:\comskip\ChannelIni\Kabel.ini --logo=i:\comskip\ChannelLogos\Kabel.logo.txt %1
) else (
echo %1|find "ProSieben">NUL
if "%errorlevel%" equ "0" (
"i:\comskip\comskip.exe" --ini=i:\comskip\ChannelIni\pro7.ini --logo=i:\comskip\ChannelLogos\pro7.logo.txt %1
) else (
echo %1|find "DMAX">NUL
If "%errorlevel%" equ "0" (
"i:\comskip\comskip.exe" --ini=i:\comskip\ChannelIni\DMAX.ini --logo=i:\comskip\ChannelLogos\DMAX.logo.txt %1
) else (
echo %1|find "VOX">NUL
if "%errorlevel%" equ "0" (
"i:\comskip\comskip.exe" --ini=i:\comskip\ChannelIni\VOX.ini --logo=i:\comskip\ChannelLogos\VOX.logo.txt %1
) else (
echo %1|find "Erste">NUL
if "%errorlevel%" equ "0" (
"i:\comskip\comskip.exe" --ini=i:\comskip\ChannelIni\ard.ini --logo=i:\comskip\ChannelLogos\ard.logo.txt %1
) else (
"i:\comskip\comskip.exe" --ini=i:\comskip\comskip.ini
)

Leider hab ich keine Ahnung von Batch schreiben und finde einfach nicht den Denkfehler. Es ist als ob find nichts findet. Ich weiß wirklich nicht mehr weiter.
Für Hilfe wäre ich sehr dankbar.

Gruß Konrad
Mitglied: 60730
15.06.2009 um 20:17 Uhr
Servus,

so - wie ich dein Script sehe - ist es - kann es nicht laufen.

echo "%1"|find "RTL">NUL
bedeutet auf Biberdeutsch:
schreibe den Aufruf der batch nach Nul.

Und wie es die Bürger der neueren Bundesländern sagen würden.
Na schräib moll den äufrüf von där bädsch nach null nischdd..


..und egal wie -in null wird nix gefunden - da null "null" ausgabe hat..

ergo "müßte" es so funktionieren
01.
echo "%1"|find "RTL" && "i:\comskip\comskip.exe" --ini=i:\comskip\ChannelIni\RTL.ini --logo=i:\comskip\ChannelLogos\RTL.logo.txt %1

und "wenn" der zu findende Wert eh der gleiche ist, wie der Name der .ini und der .txt - am einfachsten das ganze auch noch "vollparametrisieren -, anstatt ein ellenlanges - bis auf die Variablen identisches Script zu schreiben.


gruß
Bitte warten ..
Mitglied: LotPings
15.06.2009 um 20:25 Uhr
Da es auf den Errorlevel ankommt sehe ich anders als Timo in deiner Verwendung von echo und find kein Problem.

Ein Problem ist aber :
  • das Fehlen von etlichen schließenden Klammern am Ende. Klammern müssen immer paarweise benutzt werden, deinen "Else (" fehlt aber das zugehörige ")"
  • die Suche nach RTL vor der Suche nach RTL2 - der längere Begriff muss zuerst kommen.
  • für meinen Geschmack die schreckliche Redundanz

Gruß
LotPings
Bitte warten ..
Mitglied: Biber
15.06.2009 um 21:37 Uhr
Moin Konrad123,

....also könnte es - im ersten Schritt soweit entschlackt, dass die grundsätzliche Programmlogik erkennbar wird- so skizziert werden:

01.
@echo off & setlocal 
02.
 
03.
echo %1|find /i "Sat.1">NUL &&  call :processComskip "sat1" "sat1" %1 && goto :eof 
04.
echo %1|find /i "Kabel">NUL &&  call :processComskip "Kabel" "Kabel" %1  && goto :eof 
05.
echo %1|find /i "ProSieben">NUL &&  call :processComskip "pro7" "pro7" %1 && goto :eof 
06.
 
07.
..... 
08.
:: nix gefunden? 
09.
goto Fehlerbehandlung 
10.
 
11.
:processComskip para1=Ininame para2=logoname para3=der alte Para%1 des Batches 
12.
"i:\comskip\comskip.exe" --ini=i:\comskip\ChannelIni\%~1.ini --logo=i:\comskip\ChannelLogos\%~2.logo.txt %3 
13.
goto :eof
[als grobe Skizze]

Grüße
Biber

[/Edit] ein :call :processComskip+goto :eof statt ein goto : ProcessComskip [/Edit]
Bitte warten ..
Mitglied: konrad123
16.06.2009 um 08:36 Uhr
Danke für eure Antworten.
Ich hab das Script zum laufen gebracht. Es ist noch nicht schön aufgebaut aber es läuft erstmals.
Ich hab jetzt allerdings noch ein Problem. Comskip sagt es findet die Datei nicht.
Es liegt an den fehlenden "" um den Pfad. Doch ich weiß nicht wie ich es hinbekomme das da der Pfad in "" gesetzt wird.

Gruß Konrad
Bitte warten ..
Mitglied: konrad123
16.06.2009 um 16:22 Uhr
Kennt sich da keiner aus?
Der Pfad wird nur bis zum ersten Leerzeichen als Pfad angesehen. Die Teile nach dem Pfad interpretiert Comskip als Parameter. Ich habs schon mit ( jetzt bitte nicht hauen ) zwei "" versucht also den Parameter ""%1"" ausgegeben. Doch es funktioniert leider nicht.
Danke für eure Hilfe.
Bitte warten ..
Mitglied: LotPings
16.06.2009 um 16:29 Uhr
Natürlich kennen sich hier einige aus,

aber du solltest dir angewöhnen präzise Fragen zu stellen.

Wenn du schreibst
Ich hab das Script zum laufen gebracht
Dann weiß hier keiner WAS du gemacht hast.

Grundsätzlich solltest du auch mal Beispiel Dateinamen posten, ich könnte mir nämlich vorstellen das es viel effizienter wäre den Sender direkt zu extrahieren.
In den bisherigen Beispielen kommt der Dateiname in %1 an, ob da bereits Anführungszeichen bestehen weiß auch niemand.

Gruß
LotPings
Bitte warten ..
Mitglied: 60730
16.06.2009 um 16:30 Uhr
Zitat von konrad123:
Kennt sich da keiner aus?

Servus,

nein - offensichtlich niemand....

Zur Info:

ein
Echo off
gehört erst dann in eine Batch, wenn Sie 100% wasserdicht ist und ohne diese Zeile ist Bugfixen auch kein Ding.

Danke für eure Hilfe.

gerne geschehen - und wenn du uns nun dein Sammelsurium unserer Ansätze zeigst, könnte man auch genau an der Stelle weitermachen, wo der Schuh drückt.

gruß
Bitte warten ..
Mitglied: konrad123
16.06.2009 um 18:35 Uhr
Hallo, sorry war mein Fehler ich hätte mich besser Ausdrücken sollen.
Ich hab jetzt das Script nochmals nach Bibers Vorgaben neu aufgebaut und siehe da der Fehler ist weg.
Es funktioniert ohne Probleme und die Dateien werden bearbeitet.
Für den Fall das es noch jemanden interessiert so ist das ganze jetzt aufgebaut.

In meinen Video-Ordner liegen .ts Dateien in Unterordner. z.B.

Two and a Half Men_2009-06-08_16-10.ts
Scrubs - Die Anfänger Mein falscher Rückschluss_ProSieben_2009-06-03_09-50.ts
Die Simpsons Jazzy and the Pussycats_ProSieben_2009-06-07_18-40.ts

Das erste Script sucht nach .ts Dateien und den dazugehörigen .txt Dateien. Falls keine .txt Dateien gefunden werden übergibt das Script "comskipnachts.bat" die Dateinamen an die "sender.bat"

comskipnachts.bat:
for /R "E:\" %%i in (*.ts) do if not exist "%%~dpni.txt" "i:\comskip\sender.bat" "%%~fi"

sender.bat:
@echo off & setlocal
echo sender.bat berechnete %1 >>sender.log

echo %1|find /i "Sat.1">NUL && call :processComskip "sat1" "sat1" %1 && goto :eof
echo %1|find /i "Kabel">NUL && call :processComskip "kabel" "kabel" %1 && goto :eof
echo %1|find /i "ProSieben">NUL && call :processComskip "pro7" "pro7" %1 && goto :eof
echo %1|find /i "RTL">NUL && call :processComskip "rtl" "rtl" %1 && goto :eof
echo %1|find /i "RTL2">NUL && call :processComskip "rtl2" "rtl2" %1 && goto :eof
echo %1|find /i "VOX">NUL && call :processComskip "VOX" "VOX" %1 && goto :eof
echo %1|find /i "ZDF">NUL && call :processComskip "zdf" "zdf" %1 && goto :eof
echo %1|find /i "DMAX">NUL && call :processComskip "dmax" "dmax" %1 && goto :eof
echo %1|find /i "ERSTE">NUL && call :processComskip "ard" "ard" %1 && goto :eof

::nix gefunden?
goto standart

:processComskip para1=Ininame para2=logoname para3=der alte Para%1 des Batches
"i:\comskip\comskip.exe" --ini=i:\comskip\ChannelIni\%~1.ini --logo=i:\comskip\ChannelLogos\%~2.logo.txt %3


:standart
"i:\comskip\comskip.exe" %1


goto :eof

Es scheint wunderbar zu funktionieren. Ich muß das noch eine Weile testen.

Danke für eure Hilfe.
Bitte warten ..
Mitglied: LotPings
16.06.2009 um 18:50 Uhr
Ich nehme mal an das der erste Dateiname ohne Sender ein Versehen ist.

So ein Dateiname lässt sich doch wunderbar mit delims=_ parsen.
Und wenn du deine ini und logo Dateien an die tatsächlichen Sendernamen anpasst, geht das ganze viel einfacher.

Übrigends wrst du mit deiner Batchdatei niemals RTL2 Filme säubern können, weil in RTL2 mmer auch RTL enthalten ist und die Zeile mit RTL2 gar nicht abgearbeitet wrid.

Gruß
LotPings
Bitte warten ..
Mitglied: Biber
16.06.2009 um 19:38 Uhr
Moin Lord,
<OT>
Zitat von LotPings:
Übrigends wrst du mit deiner Batchdatei niemals RTL2 Filme säubern können, weil ....

ich denke, diese ganzen Schmuddelsender werden auch durch alle Batchdateien dieser Welt nicht appetitlicher.
Und bei 9Live beispielsweise helfen wahrscheinlich auch keine mit Sagrotan 2.0 kompilierte Skripte

Andererseits....

Vielleicht ist es gar nicht so schlecht, wenn ein nicht unerheblicher Teil der bundesdeutschen Durchschnitts-MitbürgerInnen sich die Zeit damit vertreibt, statt sich dauernd von gutmütigen Moderatoren auf den Kompost tragen zu lassen.

</OT>

@konrad123
Freut mich, wenn es jetzt läuft.
Und natürlich hat Lowpings Recht mit "So ein Dateiname lässt sich doch wunderbar mit delims=_ parsen" etc pp..

Aber ich würde (gerade wenn Dir die Routine beim Skripten. fehlt) besser mit dem "kürzer und kompakter machen" noch warten.

Denn so wie jetzt ist der Batch zwar nicht so voller überraschender Wendungen, aber durchaus lesbar und von Dir pflegbar.

Was eventuell noch entfallen könnte sind die (als unterschiedliche Paramter vorgesehenen) Ini-Namen und Logo-Namen.
Wenn so ein Plattsender nach Deinen Konventionen dann halt eine Ini-Datei namens "Sat1.ini" und eine Logo-Datei "Sat1.logo.txt" haben soll... okay, dann brauchst Du diesen immer gleichen Text "Sat1" natürlich nur einmal übergeben.

Grüße
Biber
Bitte warten ..
Mitglied: konrad123
17.06.2009 um 09:09 Uhr
Das mit dem verkürzen des scripts lass ich mal. Doch ich bin froh das das jetztige Script funktioniert. Ich denke das ich da auch noch in einem halben Jahr schnell einen Sender dazu fügen kann und das ist für mich wichtig. Außerdem versteh ich den oberen Teil ganz gut. Bei den unteren versteh ich noch nicht alles:

:processComskip para1=Ininame para2=logoname para3=der alte Para%1 des Batches
"i:\comskip\comskip.exe" --ini=i:\comskip\ChannelIni\%~1.ini --logo=i:\comskip\ChannelLogos\%~2.logo.txt %3

Wann wurden die Variablen %3 oder %~2 erstellt. Liegt das an para1= usw. ?
Dann müsste ich doch eigentlich mit der Zeile:
echo sender.bat berechnete %1 von Sender %2 (bzw. %~2) >>sender.log
den Sender mit an die Log datei übergeben? Dem ist aber nicht so. Zumindest rührt er sich nicht.

Das mit RTL und RTL2 hab ich schon korrigiert. Auch wenn ich glaub ich noch nie was von RTL2 aufgenommen habe.
Wenn die inis erstmal funktionieren und die Werbung automatisch entfernt wird dann kann man vielleicht mal einen Film davon aufnehmen. Ich habs einfach nicht mehr ausgehalten das ich zwei Stunden klotzen muß um einen Film der auf 1Stunde verstümmelt worde ist zu schauen.
Ich dank euch auf jedenfall für eure Hilfe.

Gruß Konrad
Bitte warten ..
Mitglied: LotPings
17.06.2009 um 10:24 Uhr
Zitat von konrad123:
Bei den unteren versteh ich noch nicht alles:

:processComskip para1=Ininame para2=logoname para3=der alte Para%1 des Batches
"i:\comskip\comskip.exe" --ini=i:\comskip\ChannelIni\%~1.ini --logo=i:\comskip\ChannelLogos\%~2.logo.txt %3
Wann wurden die Variablen %3 oder %~2 erstellt. Liegt das an para1= usw. ?

Die Angaben hinter einem :Label sind rein Informativ und haben auf die Ausführung keinen Einfluß. (Die Kommentare mit Pseudo Labels :: :; etc nutzen diesen Umstand aus.)

Die einem Call angehängten Daten werden wie auf der Kommandozeile übergebene Parameter behandelt, Leerzeichen Tab Komma Semikolon trennen die Elemente (Es sei denn sie werden in Anführungszecihen eingefasst) Die Originalzeile erhält man mit %* die einzelnen Elemente mit %x wobei x 1 bis 9 sein kann. Weitere Elemente erhält man durch "nachschieben" mit Hilfe von shift.

Such mal in der Hillfe nach call cmd for set oder gib auf der Kommandozeile ein
Help
bzw
Help call etc

Gruß
LotPings
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Windows Netzwerk
gelöst Probleme beim Erkennen eines identischen Servers (5)

Frage von DonDento zum Thema Windows Netzwerk ...

Windows Installation
gelöst Portabel Apps erkennen oder sperren (5)

Frage von joehuaba zum Thema Windows Installation ...

C und C++
Dateien in Ordner kopieren anhand vom Teil eines Dateinamen (22)

Frage von onlyforu8373 zum Thema C und C ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...