keiosid
Goto Top

Mit Batchdatei auslesen ob eine bestimmte Datei existiert

Hallo,

ich hoffe mal, das ist mit einer Batchdatei möglich.

Ich habe ein Programm, dass mir eine große Anzahl an .jpgs erzeugt, die ich für den Druck benötige. Da ich hier einige Dateien habe , bei denen ich über 130.000 Bilder erzeuge,
muss ich mit dem Druck warten, bis das letzte Bild erzeugt ist, das dauert mit allem Drum und dran bis zu 50 Min.

Meine Idee:
Ich kann mit meinem Programm eine Batchdatei erzeugen und auch aufrufen.
Ist es möglich, eine Batchdatei so zu programmieren, dass ich Ihr den Namen der letzten Bilddatei mitgebe, und diese
dann solange ein bestimmtes Verzeichnis überwacht, bis diese Datei vorhanden ist.
Ich denke da an eine FileExist Lösung.
Wenn diese Bedingung erfüllt ist, soll die Batchdatei noch eine bestimmte Datei von einem Verzeichnis in ein weiteres Verzeichnis verschieben.

War das jetzt verständlich?

Ich setze mich eigentlich sehr wenig mit Programmierung auseinander, aber manchmal komm ich nicht drumherum.
Von daher wäre eine DAU sichere Erklärung spitze.

Danke

Grüße

KEIOS

Content-ID: 103096

Url: https://administrator.de/contentid/103096

Ausgedruckt am: 15.11.2024 um 13:11 Uhr

Iwan
Iwan 02.12.2008 um 10:43:32 Uhr
Goto Top
hallo,

DAU-sicher? sowas gibt es nicht, wie ich in meiner langjährigen Erfahrung feststellen musste face-smile

Aufruf der Batch mit: batch.bat DATEINAME
set DATEINAME=%1
REM hier fängt der Spass an
:Start
REM existiert die Datei, macht er weiter
if exist %DATEINAME% goto WEITER
goto PAUSE

REM 3 Sekunden Pause, bevor er nochmal guckt, ob die Datei existiert
:PAUSE
ping localhost -n 3
goto Start

:WEITER
DeineWeiterenBefehle...
ist erstmal ungetestet, aber zumindest ein Ansatz face-wink
Ren
Ren 02.12.2008 um 11:04:13 Uhr
Goto Top
damit das ganze noch funktioniert, wenn im Verzeichnis oder in dem Dateinamen ein Leerzeichen vorkommt:
set "DATEINAME=%~1"  

:Start
REM existiert die Datei, macht er weiter
if exist "%DATEINAME%" goto WEITER  
goto PAUSE

REM 3 Sekunden Pause, bevor er nochmal guckt, ob die Datei existiert
:PAUSE
ping localhost -n 3 >nul
goto Start

:WEITER
DeineWeiterenBefehle...
In Zeile 5 besteht noch das Problem, dass das Programm theoretisch auch dann weiter macht, wenn gar keine Datei %DATEINAME%, sondern nur ein Verzeichnis mit diesem Namen existiert. Also vielleicht noch prüfen, ob es ein Verzeichnis ist, oder wirklich die Datei:
if exist "%DATEINAME%" if not exist "%DATEINAME%\*.*" goto WEITER   
if exist "%DATEINAME%\*.*" echo Es existiert ein Verzeichnis mit dem Namen "%DATEINAME%". So ist es nicht möglich, eine Datei mit dem selben Namen zu speichern. Abbruch. & goto :eof  
auch ich habe es nicht getestet...
Gruß
60730
60730 02.12.2008 um 11:33:26 Uhr
Goto Top
Servus,

damit das ganze noch funktioniert, wenn im Verzeichnis oder in dem Dateinamen ein Leerzeichen vorkommt:

kann so nicht funktionieren ;-(

Denn dann (leerzeichen) müsste die Abfrage ja lauten:

if not %2 =="" echo "Leerzeichen gefunden" && if exist "%1 %2">nul goto weiter  

auch ungetestet - und wenn mehrere Leerzeichen drin sein sollten %3 usw.
Gruß
Ren
Ren 02.12.2008 um 11:45:11 Uhr
Goto Top
richtig, die Leerzeichen wieder vergessen. Ich habe meinen Beitrag noch einmal korrigiert. Zu starten wäre die Batch so:
batch.bat "X:\Pfad der Datei\DATEI NAME.JPG"  
Das %~1 entfernt die umschließenden Anführungszeichen dann wieder, falls sie gesetzt wurden, Dateiname wäre dann also: X:\Pfad der Datei\DATEI NAME.JPG. Damit die überprüfung klappt, baue ich sie dann wieder drum herum, in der Abfrage. if exist "X:\Pfad der Datei\DATEI NAME.JPG". Dabei wird alles zwischen dem ersten und zweiten " als ein Argument betrachtet.
Gruß
TheUntouchable
TheUntouchable 02.12.2008 um 12:03:41 Uhr
Goto Top
So hab das ganze nun noch ein wenig aufgebohrt :P Obs gebraucht wird oder nicht weis ich nicht, mir war nur langweilig ;)

@echo off

:: Überprüfe ob ein Aufrufparameter mitgegeben worden ist
:: Wenn nein = Beende Batch
IF "%~1"=="" ECHO Kein Aufrufparameter! && pause >nul && EXIT  

set "DATEI=%~1"  
set STARTZEIT=%time:~0,8%
::Startzeit wird in Sekunden umgewandelt damit man rechnen kann
for /f "delims=:, tokens=1-3" %%i in ("%time%") do Set /a TStart=%%i*3600+%%j*60+%%k   

:PRUEFUNG
CLS
ECHO.
ECHO Die zu ueberpruefende Datei lautet:
ECHO "%DATEI%"  
ECHO.
ECHO Ueberpruefung um %STARTZEIT% gestartet..
ECHO.
ECHO Status:
::Ueberpruefe ob Datei vorhanden, wenn ja wird 3 mal ein Piepton ausgegeben
IF EXIST "%DATEI%" ECHO %time:~0,8% Datei ist vorhanden!  && pause >nul && EXIT  
::Wenn nein, wird 3 mal der localhost gepingt und von vorne geprueft
::Endzeit wird in Sekunden umgewandelt damit man rechnen kann
for /f "delims=:, tokens=1-3" %%i in ("%time%") do Set /a TEnde=%%i*3600+%%j*60+%%k  
::Dauer wird ausgerechnet und in den Titel geschrieben
Set /a TDauer=TEnde-TStart
title Suchdauer: %TDauer% s
ECHO %time:~0,8% Datei nicht gefunden.. && ping localhost -n 3 >nul && GOTO :PRUEFUNG

Wie schon oben erwähnt muss hier das ganze mit ->batchname.bat "Image Name.Endung"<- aufgerufen werden

Leider funktioniert die verstrichene Zeit Anzeige nicht richtig, vielleicht kann sich das noch wer anschaun ;)

Ach ja, hier kann man auch gut erkennen das 3 Pings nur 2 Sek sind :P
KeiosID
KeiosID 02.12.2008 um 13:49:42 Uhr
Goto Top
Also bisher schon mal vielen Dank für den Input.

Bin schon fleißig am bastln und testen, kann auch schon die ersten Erfolge verzeichnen.

Wennd das Ding fertig ist, werde ich es posten und versuchen zu kommentieren.

Dank und Grüße

Keios
KeiosID
KeiosID 18.12.2008 um 12:50:19 Uhr
Goto Top
So, es funktioniert und hier noch der versprochene Code...

Verbesserungen werden vom BatchNoob gerne angenommen


"C:\Program Files\TEC-IT\BCStudio9\Bin\bcstudio.exe" -datalist="C:\Streamserve\Datamatrix\sequenz_AboOut00_V_AH_2009-1_ohne_TEST_KLEIN_DM.txt " -outlist="C:\Streamserve\Datamatrix\outlist_AboOut00_V_AH_2009-1_ohne_TEST_KLEIN_DM.txt " -s="c:\streamserve\datamatrix\Matrix.bc" -w=22000 -h=22000
set DATEINAME=C:\Streamserve\Datamatrix\codes\190019039784TESTKZ.bmp

:Start
if exist "%DATEINAME%" goto WEITER if not exist "%DATEINAME%" goto Next
:Next
ping localhost -n 3 >nul
goto Start
:WEITER
move C:\Streamserve\Datamatrix\Versand\AboOut00_V_AH_2009-1_ohne_TEST_KLEIN_DMC*.txt C:\Streamserve\Print\Adware\Versandunterlagen\
exit