Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Batch-FOR-Problem

Empfohlene Antworten

Veröffentlicht

Hallo Ihrs :)

Ich möchte mit einer Batchdatei folgendes Problemlösen:

Für alle Videos mit dem Format *.dv in einem Ordner soll das Konvertierungstool HandbrakeCLI ausgeführt werden. Wenn gerade keine DV Datei im Ordner ist, soll es so lange schleife laufen bis das wieder der Fall ist. Ich will also, auf gut Deutsch, wenn ich eine DV Datei in den Ordner Kopiere, das diese Umgewandelt wird. Dazu habe ich bis jetzt folgende Batchdatei geschrieben

:BLUB

IF exist *.dv (

For %%f In (C:\Programme\Handbrake\*.dv) Do (

HandbrakeCLI -i %%f -o %%f.mp4

DEL %%f

)

)

goto BLUB

Das DEL, da das Tool sonst immer wieder die gleiche Datei kodieren würde, die DV Datei kann nach dem Codieren ruhig gelöscht werden (muss sie aber nicht). Das funktioniert auch alles so wies ist wunderbar, nur: Wenn Keine DV-Datei im Ordner ist läuft das Programm Schleife, wenn jedoch wieder eine da ist läuft diese Schleife weiter, ohne zu Codieren, also Ohne die HandbrakeCLI auszuführen...

Suche schon seit Tagen eine Lösung und komme nicht drauf, wäre toll wenn mir jemand helfen könnte :) Vielen Dank

achtung, eins vorweg, ich bin ein lausiger coder ^^

aber bei dir liegt ja nur das cli in der For-Schleife. Du musst wohl um das ganze ding noch ne schleife machen damit eben auch das IF wieder aufgerufen wird.

deswegen ja eigentlich der goto spass? kann mir sonst noch jemand helfen?

Bei mir funktioniert das prächtig so:


:BLUB


set PFAD=C:\Programme\Handbrake


IF EXIST "%PFAD%\*.dv" (

	FOR %%f In ("%PFAD%\*.dv") DO (

		HandbrakeCLI -i %%f -o %%f.mp4

		DEL %%f

	)

)


TIMEOUT /T 5


GOTO BLUB

deswegen ja eigentlich der goto spass? kann mir sonst noch jemand helfen?

oh, das hatte ich überlesen. mit sprungmarke erledigt sich mein einwand natürlich :D

Hmm, ich hab das ganze mal nachvollzogen mit

@echo off

:BLUB

For %%f In (T:\test\*.txt) Do (

copy %%f %%f.bak

DEL %%f

echo processed %%f

)

goto BLUB

das if exist brauchst Du nicht. Und wenn, dann schon mit Verzeichnis oder rufst Du die Batch aus dem Hardbrake-Verzeichnis auf?

Problem an der ganzen Sache ist, dass sobald Du anfängst eine Datei in das Verzeichnis zu kopieren, Deine For-Schleife diese Datei entdeckt und sofort den Aufruf von Hardbrake startet.

Je nachdem wie das Tool darauf reagiert, dass die Datei noch geschrieben/kopiert wird, wird es sich wahrscheinlich beenden oder hängenbleiben.

In meinem Beispiel ist es dann fast immer bei größeren Dateien passiert, dass der COPY-Befehl noch den "Zugriff verweigert" (weil noch kopieren) bekommen hat, aber der DEL-Befehl danach ausgeführt werden konnte.

Das ist alles reine Glückssache ob das so funktioniert.

Eine Lösung wäre den DEL-Befehl in Abhängigkeit von der Existenz der MP4-Datei zu machen oder generell nur wenn Datei-Datum der MP4 älter als 1 Tag

Bearbeitet von VaNaTiC

Habe das Problem nun folgendermaßen gelöst:

2 Dateien,

die eine Verschiebts innen unterordner, die andere führt die Konvertierung aus und löscht die dann.... so funktionierts erstmal

das problem: in Ordner 1 muss ich sie jetzt immer von hand schieben, ich hätte gerne noch ein scriptfetzen der die sich von nem 3. ordner immer holt... das problem: immer wenn ich copy mit schleife mache, wird die immer wieder kopiert, gibts nich die möglichkeit des nur einmalig machen zu lassen?

Wie wäre es mit if not exist?!

if not exist PfadZudeinerDatei\test.dv KommandoZumAusführen

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.