Screenshot erstellen (mit Zusatztool) und via ftp hochladen
Hallo,
ich suche nach einer Möglichkeit mit einer .bat auf einem USB Stick einen Screenshot zu machen. Dazu suche ich ein Zusatztool was nicht installiert werden muss und über die .bat ansprechbar ist.
Der User soll die .bat (wird später mal eine .exe) ausführen und es soll ein Screenshot gemacht werden der direkt über die .bat/.exe auf einen FTP hochgeladen wird.
Wer hilft mir nach diesem Tool suchen und bastelt mt mir den passenden Code dazu?
Eventuell habt Ihr ja auch ganz andere Ansätze. Ich habe mir natürlich die bereits bestehenden Threads angeschaut, konnte aber leider nix passendes finden bis auf den Code zum ftp connect sowie Lösungen die auf Installtools bauen und somit auch nicht das passende ist.
Gruß Soidberg
ich suche nach einer Möglichkeit mit einer .bat auf einem USB Stick einen Screenshot zu machen. Dazu suche ich ein Zusatztool was nicht installiert werden muss und über die .bat ansprechbar ist.
Der User soll die .bat (wird später mal eine .exe) ausführen und es soll ein Screenshot gemacht werden der direkt über die .bat/.exe auf einen FTP hochgeladen wird.
Wer hilft mir nach diesem Tool suchen und bastelt mt mir den passenden Code dazu?
Eventuell habt Ihr ja auch ganz andere Ansätze. Ich habe mir natürlich die bereits bestehenden Threads angeschaut, konnte aber leider nix passendes finden bis auf den Code zum ftp connect sowie Lösungen die auf Installtools bauen und somit auch nicht das passende ist.
Gruß Soidberg
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 60897
Url: https://administrator.de/contentid/60897
Ausgedruckt am: 22.11.2024 um 12:11 Uhr
39 Kommentare
Neuester Kommentar
Hallo Soidberg,
ohne Dir jetzt ein komplettes Script zu schreiben.
Für die Screenshots würde ich IRFANVIEW nehmen, hat auch eine wunderbare command Line schnittstelle.
Als Beispiel:
i_view32.exe /capture=0 /convert=c:\capture_$U(%d%m%Y_%H%M%S).jpg
damit nimmst Du den ganzen Bildschirm in eine Datei auf die gleich an einer entsprechenden Stelle abgelgt wird.
mit ftp -s:inputfile.txt kannst Du das ganze dann übertragen
wobei die inputfile.txt so auszusehen hat
open ftp.server.com << steht stellvertretend für den FTP Servernamen
Benutzername
Kennwort
put und hier der hochzuladende Dateiname
bye
Ein wenig Kosmetik drumrum und schon geht das ganze
Gruß
Egbert
ohne Dir jetzt ein komplettes Script zu schreiben.
Für die Screenshots würde ich IRFANVIEW nehmen, hat auch eine wunderbare command Line schnittstelle.
Als Beispiel:
i_view32.exe /capture=0 /convert=c:\capture_$U(%d%m%Y_%H%M%S).jpg
damit nimmst Du den ganzen Bildschirm in eine Datei auf die gleich an einer entsprechenden Stelle abgelgt wird.
mit ftp -s:inputfile.txt kannst Du das ganze dann übertragen
wobei die inputfile.txt so auszusehen hat
open ftp.server.com << steht stellvertretend für den FTP Servernamen
Benutzername
Kennwort
put und hier der hochzuladende Dateiname
bye
Ein wenig Kosmetik drumrum und schon geht das ganze
Gruß
Egbert
Ich weiss nicht ob Snagit vom USB stick ohne installation läuft.
Probiers doch mal aus.
http://www.snagit.de/
Probiers doch mal aus.
http://www.snagit.de/
Die ini kannst du mit ner For Schleife und nem Find auslesen (gabs schon ein paar mal hier in diesem Bereich).
Die Werte kansn tud dan in Variabeln hinterlegen z.B. %dauer% und %abstand%
Den abstand kannst du wie schon geschrieben über den Ping machen.
Die dauer bekommst du über mehrere Schleifendurchläufe realisiert indem du einfach die dauer durch den abstand teilst. Dann weißt du ja wie oft die Schleife wiederholt werden soll.
miniversum
Die Werte kansn tud dan in Variabeln hinterlegen z.B. %dauer% und %abstand%
Den abstand kannst du wie schon geschrieben über den Ping machen.
Die dauer bekommst du über mehrere Schleifendurchläufe realisiert indem du einfach die dauer durch den abstand teilst. Dann weißt du ja wie oft die Schleife wiederholt werden soll.
miniversum
Hallo Soidberg!
Nachdem miniversum die Kopfarbeit geleistet hat, könnte ich ein wenig Handarbeit beitragen ...
Benötigt werden zunächst zwei Textdateien:
"snap.ini"
Mit ";" am Beginn einer Zeile wird diese als Kommentar interpretiert.
"ftpinit.txt"
Beachte, dass "snap.ini" keine und "ftpinit.txt" eine Leerzeile am Ende haben.
Eigentlich lassen sich die beiden Dateien auch in die Batchdatei integrieren - besonders viel Vorteil bringt es vermutlich nicht, sie getrennt zu halten, aber da es zumindest hinsichtlich der "ini"-Datei so gewünscht war ...
Die Batchdatei dazu:
Im Prinzip müsste ein "ping" mehr erfolgen (bei 15 pings gibt es ja nur 14 1-sekündliche Wartezeiten dazwischen), aber vermutlich wird die Sekunde Zeitunterschied ohnehin von "Irfanview" verbraucht.
Getestet habe ich nur den Ablauf, ohne dabei "Irfanview" oder "ftp" zu verwenden - deren Aufruf entspricht aber dem oben genannten Beispiel.
Die Anzahl der Nullen im Dateinamen lässt sich übrigens in der Zeile "set /a Nummer=" festlegen.
Grüße
bastla
[Edit] Korrektur Batch-Code: Name Screenshot-Datei (siehe Soidbergs Post unten) und etwas Kosmetik - alle Änderungen/Ergänzungen hervorgehoben [/Edit]
Nachdem miniversum die Kopfarbeit geleistet hat, könnte ich ein wenig Handarbeit beitragen ...
Benötigt werden zunächst zwei Textdateien:
"snap.ini"
;Abstand in Sekunden
15
;Dauer in Sekunden
120
"ftpinit.txt"
open ftphost..de
Agent012
***
Eigentlich lassen sich die beiden Dateien auch in die Batchdatei integrieren - besonders viel Vorteil bringt es vermutlich nicht, sie getrennt zu halten, aber da es zumindest hinsichtlich der "ini"-Datei so gewünscht war ...
Die Batchdatei dazu:
@echo off & setlocal
set "iniFile=snap.ini"
set "ftpInit=ftpinit.txt"
set "Input=inputfile.txt"
set "ScrshotName=screenshot"
set "ScrshotType=jpg"
set /a Nummer=100001
set Abstand=
del %ScrshotName%*.%ScrshotType% 2>nul
for /f "usebackq eol=;" %%i in ("%iniFile%") do (
if not defined Abstand (
set /a Abstand=%%i
) else (
set /a Dauer=%%i
)
)
set /a Anzahl=%Dauer%/%Abstand%+%Nummer%
for /l %%i in (%Nummer%,1,%Anzahl%) do call :Snap %%i
copy /y "%ftpInit%" "%Input%" <b>>nul</b>
for %%i in ("%ScrshotName%*.%ScrshotType%") do echo put "%%i" >>"%Input%"
echo bye >>"%Input%"
ftp -s:"%Input%"
goto :eof
:Snap
<b>set Nr=%1</b>
"data\i_view32.exe" /capture=0 /convert="%Scrshot<b>Name</b>%<b>%Nr:~1%</b>.%ScrshotType%"
if "%1" neq "%Anzahl%" ping -n %Abstand% 127.0.0.1 >nul
goto :eof
Getestet habe ich nur den Ablauf, ohne dabei "Irfanview" oder "ftp" zu verwenden - deren Aufruf entspricht aber dem oben genannten Beispiel.
Die Anzahl der Nullen im Dateinamen lässt sich übrigens in der Zeile "set /a Nummer=" festlegen.
Grüße
bastla
[Edit] Korrektur Batch-Code: Name Screenshot-Datei (siehe Soidbergs Post unten) und etwas Kosmetik - alle Änderungen/Ergänzungen hervorgehoben [/Edit]
Hallo Soidberg!
Würde ich Neujahrsvorsätze fassen, hätte einer davon etwa gelautet: "Du sollst nicht bereits getesteten Code zu verschönern meinen müssen und dann auch noch eine Zwischenversion posten ..."
Deine Korrektur habe ich mittlerweile auch oben vorgenommen, und inzwischen wird auch wie eigentlich beabsichtigt nummeriert (ohne "1" vorneweg) ...
Zu den beiden ".ini/init"-Dateien: Wie schon erwähnt, bringen sie getrennt kaum Vorteile - ich integriere einmal versuchsweise beide, mit der Option, die "ftpinit.txt" beim Aufruf als Argument zu übergeben:
Grüße
bastla
Würde ich Neujahrsvorsätze fassen, hätte einer davon etwa gelautet: "Du sollst nicht bereits getesteten Code zu verschönern meinen müssen und dann auch noch eine Zwischenversion posten ..."
Deine Korrektur habe ich mittlerweile auch oben vorgenommen, und inzwischen wird auch wie eigentlich beabsichtigt nummeriert (ohne "1" vorneweg) ...
Zu den beiden ".ini/init"-Dateien: Wie schon erwähnt, bringen sie getrennt kaum Vorteile - ich integriere einmal versuchsweise beide, mit der Option, die "ftpinit.txt" beim Aufruf als Argument zu übergeben:
@echo off & setlocal
::Abstand und Dauer in Sekunden
set /a Abstand=15
set /a Dauer=120
::Dateinamenformat (Anzahl Nullen)
set /a Nummer=100001
set "Input=inputfile.txt"
if [%1] neq copy /y "%~1" "%Input%">nul & goto :weiter
:::::::::::::::::::::::::::::::::::::::::::::
::ftpinit, falls nicht als Argument übergeben
echo open ftphost..de >"%Input%"
echo Agent012 >>"%Input%"
echo *** >>"%Input%"
echo binary >>"%Input%"
::ftpinit-Ende
:::::::::::::::::::::::::::::::::::::::::::::
:weiter
set "ScrshotName=screenshot"
set "ScrshotType=jpg"
del %ScrshotName%*.%ScrshotType% 2>nul
set /a Anzahl=%Dauer%/%Abstand%+%Nummer%
for /l %%i in (%Nummer%,1,%Anzahl%) do call :Snap %%i
for %%i in ("%ScrshotName%*.%ScrshotType%") do echo put "%%i" >>"%Input%"
echo bye >>"%Input%"
ftp -s:"%Input%"
goto :eof
:Snap
set Nr=%1
"data\i_view32.exe" /capture=0 /convert="%ScrshotName%%Nr:~1%.%ScrshotType%"
if "%1" neq "%Anzahl%" ping -n %Abstand% 127.0.0.1 >nul
goto :eof
Grüße
bastla
Ich denke bastla meinte eher das er den Geposteten Code ncith getestet hatte. Mach ich auch manchmal (zugegeben).
Im Prinzip war meine technische Erklärung auch so gemeint wie bastla sie umgesetzt hat. Ich hätte es also auch so gemacht.
Das die 1 Sekunde beim Ping Befehl nicht genau hinhauen muß man hinnehmen. Immerhin sprechen sir ja von einem PC. Da kann man sowieso keine Echtzeit erwarten....
Das Auslesen der Werte aus der ini hätte ich vielleicht anders gelöst, weil ich es persönlich einfach besser zu handhaben finde.
also anstatt
eher so:
Klar das png vormat ist denke ich besser geeignet.
Welche Argumente meinst du? In bastlas code werden, wird einfach nur die "screen2ftp.bat" (oder wie auch immer sdie heist) aufgerufen wird die "inputfile.txt" mit den Werten aus der Batch erzeugt.
Wird lautet der Aufruf "screen2ftp.bat meineftpdatei.txt" so wird diese als "inputfile.txt" benutzt.
Allerdings ist ein zudsammenfügen der ini und der txt Datei für das ftp hier nicht wirklich gut, besonders weil ohne die Übergabe eines Arguments die inputfile.txt ja neu geschrieben wird udn daher die Werte für Abstand und Dauer dort ncith mehr drin stehen, müßte man also im Code anpassen, wäre aber nur eine kleine Änderung.
miniversum
Im Prinzip war meine technische Erklärung auch so gemeint wie bastla sie umgesetzt hat. Ich hätte es also auch so gemacht.
Das die 1 Sekunde beim Ping Befehl nicht genau hinhauen muß man hinnehmen. Immerhin sprechen sir ja von einem PC. Da kann man sowieso keine Echtzeit erwarten....
Das Auslesen der Werte aus der ini hätte ich vielleicht anders gelöst, weil ich es persönlich einfach besser zu handhaben finde.
also anstatt
for /f "usebackq eol=;" %%i in ("%iniFile%") do (
if not defined Abstand (
set /a Abstand=%%i
) else (
set /a Dauer=%%i
)
)
if not defined Abstand (
set /a Abstand=%%i
) else (
set /a Dauer=%%i
)
)
eher so:
for /f "eol=; delims==" %%i in ('find /i "Abstand" "%iniFile%"') do set Abstand=%%j
for /f "eol=; delims==" %%i in ('find /i "Dauer" "%iniFile%"') do set Dauer=%%j
wobei dann ind er ini Datei halt ncith nur die Zahlen untereinander stehen, sondern sondern in der Form:for /f "eol=; delims==" %%i in ('find /i "Dauer" "%iniFile%"') do set Dauer=%%j
Abstand=15
Dauer=120
Dauer=120
Klar das png vormat ist denke ich besser geeignet.
Welche Argumente meinst du? In bastlas code werden, wird einfach nur die "screen2ftp.bat" (oder wie auch immer sdie heist) aufgerufen wird die "inputfile.txt" mit den Werten aus der Batch erzeugt.
Wird lautet der Aufruf "screen2ftp.bat meineftpdatei.txt" so wird diese als "inputfile.txt" benutzt.
Allerdings ist ein zudsammenfügen der ini und der txt Datei für das ftp hier nicht wirklich gut, besonders weil ohne die Übergabe eines Arguments die inputfile.txt ja neu geschrieben wird udn daher die Werte für Abstand und Dauer dort ncith mehr drin stehen, müßte man also im Code anpassen, wäre aber nur eine kleine Änderung.
miniversum
Zu 2)
Also das ganze in einer Datei würd ich jetzt, ohne in bastlas Posting zu arg reinzufummeln so, machen.
Wobei die Datei dann volgendermasen aufgebaut sein würde:
miniversum
Edit: Fehlerkorrektur beim Einlesen der übergebenen Datei
Also das ganze in einer Datei würd ich jetzt, ohne in bastlas Posting zu arg reinzufummeln so, machen.
@echo off & setlocal
::Dateinamenformat (Anzahl Nullen)
set /a Nummer=100001
set "Input=inputfile.txt"
if [%1] neq (
for /f "eol=; tokens=1,2 delims==" %%i in ('find /i "Abstand=" "%~1"') do set Abstand=%%j
for /f "eol=; tokens=1,2 delims==" %%i in ('find /i "Dauer=" "%~1"') do set Dauer=%%j
if exist "%Input%" del "%Input%"
for /f "eol=; tokens=1,2 delims==" %%i in ('find /i "FTP=" "%~1"') do echo %%j>>"%Input%"
) else (
::Abstand und Dauer in Sekunden
set /a Abstand=15
set /a Dauer=120
:::::::::::::::::::::::::::::::::::::::::::::
::ftpinit, falls nicht als Argument übergeben
echo open ftphost..de >"%Input%"
echo Agent012 >>"%Input%"
echo *** >>"%Input%"
echo binary >>"%Input%"
::ftpinit-Ende
:::::::::::::::::::::::::::::::::::::::::::::
)
:weiter
set "ScrshotName=screenshot"
set "ScrshotType=jpg"
del %ScrshotName%*.%ScrshotType% 2>nul
set /a Anzahl=%Dauer%/%Abstand%+%Nummer%
for /l %%i in (%Nummer%,1,%Anzahl%) do call :Snap %%i
for %%i in ("%ScrshotName%*.%ScrshotType%") do echo put "%%i" >>"%Input%"
echo bye >>"%Input%"
ftp -s:"%Input%"
del "%Input%"
goto :eof
:Snap
set Nr=%1
"data\i_view32.exe" /capture=0 /convert="%ScrshotName%%Nr:~1%.%ScrshotType%"
if "%1" neq "%Anzahl%" ping -n %Abstand% 127.0.0.1 >nul
goto :eof
Wobei die Datei dann volgendermasen aufgebaut sein würde:
;Dauer in Sekunden
Dauer=120
;Abstand in Sekunden
Dauer=5
;FTPDaten
FTP=open ftphost.Berater13.iberio.de
FTP=Berater13
FTP=***
FTP=Binäry
FTP=cd html
FTP=cd Berater13
miniversum
Edit: Fehlerkorrektur beim Einlesen der übergebenen Datei
Hallo Soidberg!
Leider war ich fast den ganzen Tag weg, daher erst jetzt zur Klarstellung:
Grüße
bastla
Leider war ich fast den ganzen Tag weg, daher erst jetzt zur Klarstellung:
Sorry, das verstehe ich nicht. Meinst du mein Verhalten?
Nein, überhaupt nicht - war ganz allein meine Nase, an die ich gefasst habe, weil ich (vorher schon funktionierenden) Code gepostet hatte, bei dem es nötig war, ihn zu korrigieren.Es tut mir leid wenn du meine Korrektur als Angriff gewertest hast.
Habe ich nicht und würde ich nicht.Grüße
bastla
@miniversum
Hatte es auch gerade so ähnlich hingebogen, bis auf "tokens=1,2" - da das Token 1 ohnehin nicht verwendet wird, könnte man gleich auf
verkürzen ...
Grüße
bastla
Hatte es auch gerade so ähnlich hingebogen, bis auf "tokens=1,2" - da das Token 1 ohnehin nicht verwendet wird, könnte man gleich auf
for /f "eol=; tokens=2 delims==" %%i in ('find /i "Abstand" "%~1"') do set Abstand=%%i
Grüße
bastla
Hallo Soidberg und miniversum!
Ein Versuch mit sofortigem Versand:
Egal, ob der Aufruf mit Übergabe einer "config.ini" (@miniversum: oben hattest Du zweimal "Dauer") oder ohne erfolgt, es wird auf jeden Fall eine "ftpinit.txt" erstellt, da diese für jeden einzelnen Upload verwendet wird.
Die Umstellung von "if () else ()" auf "goto" ist zwar nicht elegant, aber ich hatte jeweils Fehlermeldungen, wenn keine "config.ini" übergeben wurde (Verdacht: wegen des "find", das zwar nicht ausgeführt, aber dennoch interpretiert wird und dem dabei die zu durchsuchende Datei "%1" fehlt).
Inwieweit die Verzögerung durch den zwischenzeitlichen Upload per Verkürzung der Pause ("ping") zu kompensieren ist, bleibt zu testen ...
Grüße
bastla
Ein Versuch mit sofortigem Versand:
@echo off & setlocal
::Dateinamenformat (Anzahl Nullen)
set /a Nummer=100001
set "Input=inputfile.txt"
set "ftpInit=ftpinit.txt"
if exist "%ftpInit%" del "%ftpInit%"
if [%1]== goto :Defaults
for /f "eol=; tokens=2 delims==" %%i in ('find /i "Abstand" "%~1"') do set Abstand=%%i
for /f "eol=; tokens=2 delims==" %%i in ('find /i "Dauer" "%~1"') do set Dauer=%%i
for /f "eol=; tokens=2 delims==" %%i in ('find /i "FTP" "%~1"') do echo %%i>>"%ftpInit%"
goto :weiter
:Defaults
::Abstand und Dauer in Sekunden
set /a Abstand=15
set /a Dauer=120
:::::::::::::::::::::::::::::::::::::::::::::
::ftpinit, falls nicht als Argument übergeben
echo open ftphost.Berater13.iberio.de >>"%ftpInit%"
echo Berater13 >>"%ftpInit%"
echo *** >>"%ftpInit%"
echo binary >>"%ftpInit%"
echo cd html >>"%ftpInit%"
echo cd Berater13 >>"%ftpInit%"
::ftpinit-Ende
:::::::::::::::::::::::::::::::::::::::::::::
:weiter
set "ScrshotName=screenshot"
set "ScrshotType=jpg"
del "%ScrshotName%*.%ScrshotType%" 2>nul
set /a Anzahl=%Dauer%/%Abstand%+%Nummer%
for /l %%i in (%Nummer%,1,%Anzahl%) do call :SnapAndFtp %%i
goto :eof
:SnapAndFtp
set Nr=%1
"data\i_view32.exe" /capture=0 /convert="%ScrshotName%%Nr:~1%.%ScrshotType%"
type "%ftpInit%">"%Input%"
echo put "%ScrshotName%%Nr:~1%.%ScrshotType%">>"%Input%"
echo bye >>"%Input%"
echo Sende "%ScrshotName%%Nr:~1%.%ScrshotType%" (bis %Anzahl:~1%) ...
ftp -s:"%Input%"
if "%1" neq "%Anzahl%" ping -n %Abstand% 127.0.0.1 >nul
goto :eof
Die Umstellung von "if () else ()" auf "goto" ist zwar nicht elegant, aber ich hatte jeweils Fehlermeldungen, wenn keine "config.ini" übergeben wurde (Verdacht: wegen des "find", das zwar nicht ausgeführt, aber dennoch interpretiert wird und dem dabei die zu durchsuchende Datei "%1" fehlt).
Inwieweit die Verzögerung durch den zwischenzeitlichen Upload per Verkürzung der Pause ("ping") zu kompensieren ist, bleibt zu testen ...
Grüße
bastla
Hallo Soidberg!
Grüße
bastla
... der Fehler scheint sich geändert zu haben ...
Überprüfe die "config.ini" (oder, wie sie bei Dir noch heißt, "inputfile.ini") darauf hin, ob ein Eintrag für "Abstand=" existiert.Bin mal auf deine Variante gespannt.
Eine aktuellere als die von 22:12:35 Uhr habe ich noch nicht zu bieten ... Grüße
bastla
Moin alle,
das macht ja richtig Spass, so vielen Perfektionisten auf einmal zuzuschauen...
Dann würde ich auch gern auch ein (überflüssiges, aber ) ästhetisches i-Tüpfelchen beisteuern.
Irgendwie gänzlich unerotisch sieht dieser Block aus:
...den würde ich, wenn es schon professionell aussehen soll, so formuli/formatieren:
... dann ist es richtig wartbar.
Ansonsten: Respekt!
Biber
das macht ja richtig Spass, so vielen Perfektionisten auf einmal zuzuschauen...
Dann würde ich auch gern auch ein (überflüssiges, aber ) ästhetisches i-Tüpfelchen beisteuern.
Irgendwie gänzlich unerotisch sieht dieser Block aus:
...
:::::::::::::::::::::::::::::::::::::::::::::
::ftpinit, falls nicht als Argument übergeben
echo open ftphost.Berater13.iberio.de >>"%ftpInit%"
echo Berater13 >>"%ftpInit%"
echo *** >>"%ftpInit%"
echo binary >>"%ftpInit%"
echo cd html >>"%ftpInit%"
echo cd Berater13 >>"%ftpInit%"
::ftpinit-Ende
:::::::::::::::::::::::::::::::::::::::::::::
...
:::::::::::::::::::::::::::::::::::::::::::::
::ftpinit, falls nicht als Argument übergeben
(echo open ftphost.Berater13.iberio.de
echo Berater13
echo ***
echo binary
echo cd html
echo cd Berater13 )>>"%ftpInit%"
::ftpinit-Ende
:::::::::::::::::::::::::::::::::::::::::::::
Ansonsten: Respekt!
Biber
@Biber
Ich hatte sogar schon daran gedacht, Deine an alte QBasic-"Data"-Statements errinnernde Mimik (wie etwa hier gezeigt) zu imitieren, aber diese Version ist entschieden schöner ...
... und müsste sogar so funktionieren:
Grüße
bastla
Ich hatte sogar schon daran gedacht, Deine an alte QBasic-"Data"-Statements errinnernde Mimik (wie etwa hier gezeigt) zu imitieren, aber diese Version ist entschieden schöner ...
... und müsste sogar so funktionieren:
:::::::::::::::::::::::::::::::::::::::::::::
::ftpinit, falls nicht als Argument übergeben
(
echo open ftphost.Berater13.iberio.de
echo Berater13
echo ***
echo binary
echo cd html
echo cd Berater13
)>"%ftpInit%"
::ftpinit-Ende
:::::::::::::::::::::::::::::::::::::::::::::
Grüße
bastla
...für bastlas scheinheilige Frage würde sprechen:
... das würde ich ja nicht als Maniküre bezeichnen... *<ganzbreitgrinz>*
Schönen Abend noch
Biber
C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>set Dauer=4
C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>set Dauer=2
...
... das würde ich ja nicht als Maniküre bezeichnen... *<ganzbreitgrinz>*
Schönen Abend noch
Biber
@bastla
Ich glaube die 1Sekunde Pause ist so schwer genau festzulegen. Durch zugrifsZeiten auf den FTP die ja auch schwanken können und da es ja ein PC mit Windows ist udn kein Echtzeitbetriebssystem würd ich diese zeitliche anforderung nicht ganz so hoch stecken. Aber das kann man ja am Ende noch anpassen und vielelcith aus dem Ping dann doch ein Sleep oder einfach nur eine For Schleife machen. Da wäre da sowieso die Frage zu klären was passiert wenn Abstand > Dauer ist. Oder was wenn Dauer=0 oder Dauer=1 sein soll.
Also ichhabs grade nochmal durchgetestet und ich bekomme Beim Schreiben der Werte aus dem config.ini (oder wie auch immer die Datei mit den Einstellungen heißt) die Meldung "Zugriff verweigert". Ohne Datei als Parameter, also wenn die Defaultwerte geschrieben werden, gehts.
Ist das bei euch auch so?
mini
Ich glaube die 1Sekunde Pause ist so schwer genau festzulegen. Durch zugrifsZeiten auf den FTP die ja auch schwanken können und da es ja ein PC mit Windows ist udn kein Echtzeitbetriebssystem würd ich diese zeitliche anforderung nicht ganz so hoch stecken. Aber das kann man ja am Ende noch anpassen und vielelcith aus dem Ping dann doch ein Sleep oder einfach nur eine For Schleife machen. Da wäre da sowieso die Frage zu klären was passiert wenn Abstand > Dauer ist. Oder was wenn Dauer=0 oder Dauer=1 sein soll.
Also ichhabs grade nochmal durchgetestet und ich bekomme Beim Schreiben der Werte aus dem config.ini (oder wie auch immer die Datei mit den Einstellungen heißt) die Meldung "Zugriff verweigert". Ohne Datei als Parameter, also wenn die Defaultwerte geschrieben werden, gehts.
Ist das bei euch auch so?
mini
Hallo Soidberg!
Das Löschen der beiden ".txt"-Dateien kann unmittelbar nach der "for /l"-Schleife erfolgen.
Maniküre :
gefällt mir noch immer nicht besser als
Noch eine Anmerkung: Wenn Du beim Posten in einem Codeblock die Formatierung "fett" verwenden willst, musst Du die Tags <b > und </b > (natürlich ohne Leerstellen) setzen.
Grüße
bastla
Das Löschen der beiden ".txt"-Dateien kann unmittelbar nach der "for /l"-Schleife erfolgen.
Maniküre :
cd "%CD%\data"
cd data
Grüße
bastla
Na, dann mach ich auch noch mal Maniküre...
Diese Sequenz ist IMHO nicht sonderlich robust:
...denn es wird unterstellt, wenn ein Parameter "Dateiname" übergeben wird,
dann enthält diese Datei auch "Dauer" und "Abstand" und...
Wenn z.B. nur "Dauer", aber nicht "Abstand" in der Ini-Datei gefunden wird durch die FOR/F-Anweisung,
dann grätscht der Schnipsel unsanft und unnötig ab.
Ich würde es umdrehen: erst die Defaults auf jeden Fall setzen und ggf. überschreiben:
Grüße
Biber
[Edit] Uups, da war ich wohl ein bisschen spät... na ja... nimm es mit für die Version 1.01a..
Solche Beiträge machen mit gemeinschaftlich erarbeitetem Ergebnis machen auch mir Spaß - sowohl beim Nur-Lesen wie auch beim Mit-Diskutieren.
[/Edit]
Diese Sequenz ist IMHO nicht sonderlich robust:
....
if [%1]== goto :Defaults
for /f "eol=; tokens=2 delims==" %%i in ('find /i "Abstand" "%~1"') do set Abstand=%%i
for /f "eol=; tokens=2 delims==" %%i in ('find /i "Dauer" "%~1"') do set Dauer=%%i
for /f "eol=; tokens=2 delims==" %%i in ('find /i "FTP" "%~1"') do echo %%i>>"%ftpInit%"
goto :weiter
:Defaults
::Abstand und Dauer in Sekunden
set /a Abstand=2
set /a Dauer=6
:: << SetFTPDefaults>>
:weiter
dann enthält diese Datei auch "Dauer" und "Abstand" und...
Wenn z.B. nur "Dauer", aber nicht "Abstand" in der Ini-Datei gefunden wird durch die FOR/F-Anweisung,
dann grätscht der Schnipsel unsanft und unnötig ab.
Ich würde es umdrehen: erst die Defaults auf jeden Fall setzen und ggf. überschreiben:
:Defaults
::Abstand und Dauer in Sekunden
set /a Abstand=2
set /a Dauer=6
if [%1]== goto :ftpinit
:: hier kommt der Batch nur hin, wenn ein Parameter mitgegeben wurde...
for /f "eol=; tokens=2 delims==" %%i in ('find /i "Abstand" "%~1"') do set Abstand=%%i
for /f "eol=; tokens=2 delims==" %%i in ('find /i "Dauer" "%~1"') do set Dauer=%%i
for /f "eol=; tokens=2 delims==" %%i in ('find /i "FTP" "%~1"') do echo %%i>>"%ftpInit%"
REM ---- hier ENTFÄLLT goto :weiter
:ftpinit ------> dieses zur Sprungmarke machen!
:: << SetFTPDefaults>>
if [%1]== (
.... [die hübschen echo-Befehle, die jetzt schon in Klammern sind...]
....
)>"%ftpInit%"
::ftpinit-Ende
REM hier ENTFÄLLT (Sprungmarke) :weiter
....
Grüße
Biber
[Edit] Uups, da war ich wohl ein bisschen spät... na ja... nimm es mit für die Version 1.01a..
Solche Beiträge machen mit gemeinschaftlich erarbeitetem Ergebnis machen auch mir Spaß - sowohl beim Nur-Lesen wie auch beim Mit-Diskutieren.
[/Edit]
Ich hab auch noch ne Anmerkung die dem Biber wol entgangen ist :D
Das
miniversum
Das
del inputfile.txt
del ftpinit.txt
... am Ende ist nicht so toll. Denn wenn du die Dateinamen aus irgenteinem Grund Später mal ändern Solltest must du es an Zwei stellen ändern. Oben sind Diese Namen ja schon Variabeln zugeordnet. Da sollte man die dann auch benutzen. Also so:del ftpinit.txt
del "%Input%"
del "%ftpInit%"
del "%ftpInit%"
miniversum
@Soidberg, bastla, miniversum (an Euch als die Bis-zur-Final-Treiber )
Dann schlage ich @Soidberg vor:
Ich denke, dann kannst Du diesen Beitrag auch gelassen auf "gelöst" setzen.
Entgegen meinen sonstigen Gewohnheiten kann ich es mir auch verkneifen, den Beitrag zu schließen...
..ich könnte mir vorstellen, dass noch weiter gefeilt und hochglanzpoliert werden wird..
.... aber dennoch: es ist nur ein Batch...
Grüße
Biber
Dann schlage ich @Soidberg vor:
- ziehe zumindest miniversums Anmerkung noch nach in dem Referenzschnipsel oben
- trage noch oben in den Batch zwei saloppe Kommentarzeilen...
- und eine Zeile mit der Versionsnummer ein ("0.98 RC" oder so *gg).
Ich denke, dann kannst Du diesen Beitrag auch gelassen auf "gelöst" setzen.
Entgegen meinen sonstigen Gewohnheiten kann ich es mir auch verkneifen, den Beitrag zu schließen...
..ich könnte mir vorstellen, dass noch weiter gefeilt und hochglanzpoliert werden wird..
.... aber dennoch: es ist nur ein Batch...
Grüße
Biber
Hallo Soidberg!
Nachdem diverse von Dir doch eher lieblos entfernte Zeilen (Maniküre mit Seitenschneider? ) nun doch wieder enthalten sind, sollte der Code in dieser Fassung eigentlich funktionieren:
Grüße
bastla
Nachdem diverse von Dir doch eher lieblos entfernte Zeilen (Maniküre mit Seitenschneider? ) nun doch wieder enthalten sind, sollte der Code in dieser Fassung eigentlich funktionieren:
@echo off & setlocal
set "Input=inputfile.txt"
set "ftpInit=ftpinit.txt"
if exist "%ftpInit%" del "%ftpInit%"
:Defaults
::Abstand und Dauer in Sekunden
set /a Abstand=2
set /a Dauer=6
if [%1]== goto :ftpinit
for /f "eol=; tokens=2 delims==" %%i in ('find /i "Abstand" "%~1"') do set Abstand=%%i
for /f "eol=; tokens=2 delims==" %%i in ('find /i "Dauer" "%~1"') do set Dauer=%%i
for /f "eol=; tokens=2 delims==" %%i in ('find /i "FTP" "%~1"') do echo %%i>>"%ftpInit%"
:ftpinit
if [%1]== (
echo open ftphost.iberia.de
echo Berater13
echo *****
echo binary
echo cd html
echo cd KDbetreuung
)>"%ftpinit%"
::Screenshot-Dateinamen
::Anzahl Nullen
set /a Nummer=100001
set "ScrshotName=screenshot"
set "ScrshotType=png"
del "%ScrshotName%*.%ScrshotType%" 2>nul
set /a Anzahl=%Dauer%/%Abstand%+%Nummer%
for /l %%i in (%Nummer%,1,%Anzahl%) do call :SnapAndFtp %%i
del "%Input%"
del "%ftpInit%"
goto :eof
:SnapAndFtp
set Nr=%1
"i_view32.exe" /capture=0 /convert="%ScrshotName%%Nr:~1%.%ScrshotType%"
type "%ftpInit%">"%Input%"
echo put "%ScrshotName%%Nr:~1%.%ScrshotType%">>"%Input%"
echo bye >>"%Input%"
echo Sende "%ScrshotName%%Nr:~1%.%ScrshotType%" (bis %Anzahl:~1%) ...
ftp -s:"%Input%"
del "%ScrshotName%*.%ScrshotType%" 2>nul
if "%1" neq "%Anzahl%" ping -n %Abstand% 127.0.0.1 >nul
goto :eof
Grüße
bastla