Zeichenkette in Dateinamen erkennen.
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 118216
Url: https://administrator.de/forum/zeichenkette-in-dateinamen-erkennen-118216.html
Ausgedruckt am: 06.05.2025 um 23:05 Uhr
12 Kommentare
Neuester Kommentar

Servus,
so - wie ich dein Script sehe - ist es - kann es nicht laufen.
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
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ß
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
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ß

Da es auf den Errorlevel ankommt sehe ich anders als Timo in deiner Verwendung von echo und find kein Problem.
Ein Problem ist aber :
Gruß
LotPings
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
Moin Konrad123,
also könnte es - im ersten Schritt soweit entschlackt, dass die grundsätzliche Programmlogik erkennbar wird- so skizziert werden:
[als grobe Skizze]
Grüße
Biber
[/Edit] ein :call :processComskip+goto :eof statt ein goto : ProcessComskip [/Edit]
also könnte es - im ersten Schritt soweit entschlackt, dass die grundsätzliche Programmlogik erkennbar wird- so skizziert werden:
@echo off & setlocal
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
.....
:: nix gefunden?
goto Fehlerbehandlung
: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
goto :eof
[als grobe Skizze]
Grüße
Biber
[/Edit] ein :call :processComskip+goto :eof statt ein goto : ProcessComskip [/Edit]

Natürlich kennen sich hier einige aus,
aber du solltest dir angewöhnen präzise Fragen zu stellen.
Wenn du schreibst
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
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

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ß

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
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
Moin Lord,
<OT>
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
<OT>
Zitat von @77559:
Übrigends wrst du mit deiner Batchdatei niemals RTL2 Filme säubern können, weil ....
Ü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

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. ?
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