soidberg
Goto Top

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

Content-ID: 60897

Url: https://administrator.de/forum/screenshot-erstellen-mit-zusatztool-und-via-ftp-hochladen-60897.html

Ausgedruckt am: 22.12.2024 um 22:12 Uhr

Egbert
Egbert 08.06.2007 um 20:59:35 Uhr
Goto Top
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
Rafiki
Rafiki 08.06.2007 um 22:13:35 Uhr
Goto Top
Ich weiss nicht ob Snagit vom USB stick ohne installation läuft.
Probiers doch mal aus.

http://www.snagit.de/
Soidberg
Soidberg 09.06.2007 um 01:47:31 Uhr
Goto Top
Ich weiss nicht ob Snagit vom USB stick ohne
installation läuft.
Probiers doch mal aus.

http://www.snagit.de/

Nein läuft es nicht. Ich besitze zwar eine portable Variante aber das ist ein zu großes Kaliber.

Die Idee mit Irfan ist aber genial. Das habe ich hier und mache mich morgen mal ans basteln.

@Egbert

Ein kompletter Code ist auch nicht unbedingt nötig, denke das bekomme ich hin. Mir hat nur der Aufhänger gefehlt.

Vielen lieben Dank, ich werde berichten.

Gruß Soidberg
Soidberg
Soidberg 09.06.2007 um 14:33:28 Uhr
Goto Top
So hier der bisherige Code:

~~~SNIP-Batch~~~
Echo off

cd "%CD%\data"

i_view32.exe /capture=0 /convert=%CD%\screenshot.jpg

ftp -s:inputfile.txt
~~~SNAP-Batch~~~

~~~SNIP-Inputfile~~~
open ftphost..de
Agent012
***
put screenshot.jpg
bye
~~~SNAP-Inputfile~~~

Jetzt ist wie im Leben auch, es müssten noch ein paar Zusätze hinzukommen.


1) durch eine .ini einen festen Zeitabstand oder Anzahl der Bilder festlegen.

Wie könnte man das den mitumsetzen?

Gedachter Ablauf:

Kunde startet das Kundenmodul, dieses ruft beim Start die sreenshot.bat mit auf...

Die .bat startet und macht zum Beispiel alle 15 Sekunden (für 2 Minuten) ein Bild. Die Sekunden sowie die Dauer soll in einer externen .ini stehen. *Eventuell kann man die .ini auslesen lassen und mittels "Ping-Pause" umsetzen?

Die Bilder sollen fortlaufend im Namen nummeriert werden (Screenshot1.jpg etc) und hochgeladen werden.

*Aufruf zum Brainstorming* face-smile

Gruß Soidberg
miniversum
miniversum 09.06.2007 um 17:40:44 Uhr
Goto Top
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
Soidberg
Soidberg 09.06.2007 um 19:05:14 Uhr
Goto Top
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

Ich beschäftige mich zur Zeit mit Batch, bin aber von For Schleifen noch etwas entfernt. Ich habe hier zwar schon massige Beispiele gesehen und mir ist auch aufgefallen das sich meistens recht viel vom Code ähnelt. Begreifen kann ich es aber noch nicht wirklich.

Dazu kommt das ich auch keine Ahnung hätte wie man das mit dem bisherigen Code vereint.

Würdest du mir den Gefallen tun und mir den Code zur Verfügung stellen? Eventuell hast du auch noch einen Link mit einer einfachen aber ausführlichen Erklärung zu FOR Schleifen. Sozusagen für Anfänger.

Hoffe auf Verständnis

Gruß Soidberg
bastla
bastla 09.06.2007 um 22:07:11 Uhr
Goto Top
Hallo Soidberg!

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
Mit ";" am Beginn einer Zeile wird diese als Kommentar interpretiert.
"ftpinit.txt"
open ftphost..de
Agent012
***
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:
@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
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]
Soidberg
Soidberg 10.06.2007 um 22:59:14 Uhr
Goto Top
Ach Bastla, abermals vielen Dank.

Miniversum tut sicher gut daran wenn er es erstmal technisch erläutert. Nur bei mir Anfänger reicht das halt auch nur bis zum "theoretischen" Verständnis.

Wenn ich mir jetzt mal deinen Code anschaue, oje das hätte Wochen gedauert. Die Fachmänner hier (in diesem Fall erneut du) schütteln das aus dem FF.

So, ich habe es mal getestet. Die .jpg´s tragen den Namen 100001.jpg, 100002.jpg usw.

Wenn ich mir den Code so anschaue sollten die doch einen anderen tragen:

screenshot100001.jpg, screenshot100002.jpg usw.

Weiterhin scheint es ein Problem mit dem einfügen der Dateinamen in die %input% Datei zu geben.

Es wird erfolgreich die ftpinit.ini nach %input% kopiert auch der bye-Befehl wird geschrieben, dazwischen fehlen aber die Dateinamen.

Denke mal der Fehler könnte hier liegen:

for %%i in ("%ScrshotName%*.%ScrshotType%") do echo put "%%i">>"%Input%"

Da ja die Dateinamen in dieser Form nicht existieren.

Wenn du mal in das komplette Pack schauen möchtest langt eine PN.

*Anmerkung:*

1) Ist es möglich die snap.ini und die ftpinit.txt zusammenzufügen so das man nur eine "configarationsdatei hat? Wenn nicht ist das absolut okay.

2) Wäre es möglich den Code so umzubauen das die Screenshots direkt nach dem schießen hochgeladen werden? Nicht erst wenn alle fertig sind?

Gruß Soidberg
Soidberg
Soidberg 11.06.2007 um 00:11:25 Uhr
Goto Top
Habe den Dateinamenfehler gefunden:

/convert="%ScrshotName%%1.%ScrshotType%"

Dann klappt es auch soweit mit dem eintragen. Jetzt habe ich einen Ordner "screener" erstellt. Der cmdLog sagt auch das die Dateien hochgeladen wurden aber sie sind nicht zu finden???

Ich habe mal einen Screenshot erstellt:

http://img530.imageshack.us/img530/2011/sshot3cr9.png

Die Dateien sind aber definitiv nicht auf dem FTP, ich bin etwas verwirrt.

EDIT

Okay es lag am BINARY Modus, der hatte gefehlt.

Jetzt muss ich nur noch herausfinden wie ich die Screenshots durch IrfanView so klein wie möglich halte, eventuell als png speichern lassen. Danach poste ich hier den ganzen Code damit auch andere etwas von haben (Codeschnipsel).

Gruß Soidberg
bastla
bastla 11.06.2007 um 02:38:59 Uhr
Goto Top
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:
@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
Soidberg
Soidberg 11.06.2007 um 08:48:59 Uhr
Goto Top
Hallo Bastla,

Zitat-Anfang

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

Zitat-Ende

Sorry, das verstehe ich nicht. Meinst du mein Verhalten?

Es tut mir leid wenn du meine Korrektur als Angriff gewertest hast. Es liegt mir völligst fern Deine Batchkünste unter den Scheffel zu stellen. Ganz im Gegenteil, ich schätze deine Gedult und dein Wissen.

Ich teste später Deine neue Version und werde Dir selbstverständlich berichten ob und wenn wo es hängt.

An dieser Stelle sei nochmal ein herzliches DANKESCHÖN ausgesprochen.

EDIT/ Frage:

Wie müssen den die Argumente übergeben werden?

Nette Grüße Soidberg
Soidberg
Soidberg 11.06.2007 um 10:24:39 Uhr
Goto Top
Ich habe jetzt ein Problem aus dem ich nicht ganz schlau werde, deshalb Poste ich es mal in einem neuen Beitrag und editiere nicht.

Der Login klappt nicht. Host wird gefunden, User wird angenommen aber beim PW sagt er mir:

LogIn incorrect

Wenn ich die Daten 1:1 aus der inputfile.txt nehme dann klappt es. Ich habe die Datei jetzt zich mal auf Schreibfehler hin untersucht und kann wirklich keinen Tippfehler (Leerzeichen etc) erfassen.

Wie geschrieben, die Logindaten sind okay. Ich konnte keine Leezeichen oder ähnliches finden.

Jemand eine Idee woran es liegen könnte?

Gruß Soidberg
miniversum
miniversum 11.06.2007 um 10:26:11 Uhr
Goto Top
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
for /f "usebackq eol=;" %%i in ("%iniFile%") do (
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:
Abstand=15
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
miniversum
miniversum 11.06.2007 um 10:28:54 Uhr
Goto Top
Schonmal im der Batch die Zeilen:
echo open ftphost..de >"%Input%"
echo Agent012 >>"%Input%"
echo * >>"%Input%"
echo binary >>"%Input%"
die Leerzeichen vor den > entfernt?
also so:
echo open ftphost.de>"%Input%"
echo Agent012>>"%Input%"
echo
*>>"%Input%"
echo binary>>"%Input%"

miniversum
Soidberg
Soidberg 11.06.2007 um 10:37:02 Uhr
Goto Top
Schonmal im der Batch die Zeilen:
> echo open ftphost..de
>"%Input%"
> echo Agent012
>>"%Input%"
> echo * >>"%Input%"
> echo binary
>>"%Input%"
die Leerzeichen vor den > entfernt?
also so:
> echo open
ftphost.de>"%Input%"
> echo
Agent012>>"%Input%"
> echo
*>>"%Input%"
> echo binary>>"%Input%"

miniversum

Hy, face-smile

ich habe den Fehler gefunden. Mein Chef hat den LogIn geändert *Kopfkratz*.

Gruß Mexagon
Soidberg
Soidberg 11.06.2007 um 12:11:03 Uhr
Goto Top
So, es geht dem Erfolg entgegen. :0)

Ich habe jetzt beide Varianten von Bastla getestet. Beide funktionieren sehr gut allerdings werde ich mich wohl für die 2te Variante mit intergrierten Daten entscheiden.

Ich habe mich jetzt mit meinem Abteilungsleiter kurzgeschlossen, es ist gewünscht das in der Batch ein Stammftp angegeben wird, wenn unsere Bearbeiter die Bilder in Ihren Ftpaccount haben möchte, müssen Sie halt eine .txt mit Ihren Daten (Host, User, PW, Verzeichnis) angeben.


Naja, es bleiben 2 Herausforderungen übrig:

1) Lässt sich der Upload nach jeden Screenshot machen? Hintergrund, es sollen Kundensessions im Kundenmodul erfasst werden und das kann auch schon mal mehrere Stunden dauern. Wenn dann erst noch 1 Stunde lang Bilder hochgeschoben werden ist das zu lang. Die jetzige Fassung eignet sich hervorragend für kurze Einsätze.

Also am besten wäre es wenn die Bilder nach jedem Screenshot hochgeschoben würden.

2) Es wäre günstig wenn man die Dauer und den Abstand gegebenenfalls auch über ein Argument angeben könnte. Im Prinzip genau das gleiche wie es jetzt mit den ftpdaten ist.
Wird nix übergeben läuft eine intergrierte Dauer sowie Abstand, mit Argument wäre es dann wieder individuell einstellbar.

Pefekt wäre es wenn man beides (ftpdaten sowie Dauer&Abstand) in einer Datei übergeben kann.

Beispiel:
~~Snip~~~
;Dauer in Sekunden
120
;Abstand in Sekunden
5

;FTPDaten
open ftphost.Berater13.iberio.de
Berater13
*
Binäry
cd html
cd Berater13

~~~Snap~~~

Diese Datei könnten unsere Mitarbeiter dann einfach anpassen falls Sie andere Daten (Ihr Hostfach, Dauer, Abstand) benötigen.

Ansonsten müsste man für ALLE ( ca 45) Berater eine persönliche .exe builden in den zumindest die Beraterhostfächer intergriert sind und den Abstand&Dauer über eine .ini regeln.

Gruß Soidberg
miniversum
miniversum 11.06.2007 um 14:41:42 Uhr
Goto Top
Zu 2)
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
Soidberg
Soidberg 11.06.2007 um 20:07:34 Uhr
Goto Top
Ich habe da einen Fehler wenn ich eine ftpinit.txt (später mal config.ini) übergebe.

Hier der Text frisch aus der Box:

C:\Dokumente und Einstellungen\Tester>set /a Nummer=100001

C:\Dokumente und Einstellungen\Tester>set "Input=inputfile.txt"  

C:\Dokumente und Einstellungen\Tester>if ["C:\Dokumente und Einstellungen\Tester\Deskt  
op\Screenshooter\Version2\ftpinit.txt"] NEQ  (  
copy /y "C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2\ftpin  
it.txt" "inputfile.txt" 1>nul  
 for /F "eol=; delims==" %i in ('find /i "Abstand" ""') do set Abstand=%j  
 for /F "eol=; delims==" %i in ('find /i "Dauer" ""') do set Dauer=%j  
 if exist "inputfile.txt" del "inputfile.txt"  
 for /F "eol=; delims==" %i in ('find /i "FTP" ""') do echo %j 1>>"inputfile.txt  
"  
)  else (
set /a Abstand=3
 set /a Dauer=9

 echo open ftphost..de  1>"inputfile.txt"  
 echo Agent012  1>>"inputfile.txt"  
 echo ***  1>>"inputfile.txt"  
 echo binary   1>>"inputfile.txt"  

)
Datei  nicht gefunden
Datei  nicht gefunden
Datei  nicht gefunden

C:\Dokumente und Einstellungen\Tester>set "ScrshotName=screenshot"  

C:\Dokumente und Einstellungen\Tester>set "ScrshotType=jpg"  

C:\Dokumente und Einstellungen\Tester>del screenshot*.jpg  2>nul

C:\Dokumente und Einstellungen\Tester>set /a Anzahl=/+100001
Fehlender Operand

C:\Dokumente und Einstellungen\Tester>for /L %i in (100001 1) do call :Snap %i

C:\Dokumente und Einstellungen\Tester>for %i in ("screenshot*.jpg") do echo put "%i  
"  1>>"inputfile.txt"  

C:\Dokumente und Einstellungen\Tester>echo bye  1>>"inputfile.txt"  

C:\Dokumente und Einstellungen\Tester>ftp -s:"inputfile.txt"  
ftp> bye

C:\Dokumente und Einstellungen\Tester>del "inputfile.txt">pause  
Drücken Sie eine beliebige Taste . . .

Eventuell hilft es Dir bei der Fehlersuche.

Wenn das klappt dann bleibt nur noch der Punkt mit dem direkten Upload nach jedem Bild.

P.S. Eine Signatur im Quellcode ist Euch beiden auf jeden Fall sicher.

Gruß Soidberg
bastla
bastla 11.06.2007 um 20:24:52 Uhr
Goto Top
Hallo Soidberg!

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
miniversum 11.06.2007 um 21:22:44 Uhr
Goto Top
Habs oben mal korrigiert.
Schau mal obs geht.

miniversum
bastla
bastla 11.06.2007 um 21:28:51 Uhr
Goto Top
@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
for /f "eol=; tokens=2 delims==" %%i in ('find /i "Abstand" "%~1"') do set Abstand=%%i  
verkürzen ...

Grüße
bastla
bastla
bastla 11.06.2007 um 22:12:35 Uhr
Goto Top
Hallo Soidberg und miniversum!

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
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
Soidberg
Soidberg 11.06.2007 um 22:32:44 Uhr
Goto Top
Habs oben mal korrigiert.
Schau mal obs geht.

miniversum

Nein, aber der Fehler scheint sich geändert zu haben wenn ich mir mal den Ablauf so anschaue:

C:\Dokumente und Einstellungen\Tester>set /a Nummer=100001

C:\Dokumente und Einstellungen\Tester>set "Input=inputfile.txt"  

C:\Dokumente und Einstellungen\Tester>if ["C:\Dokumente und Einstellungen\Tester\Deskt  
op\Screenshooter\Version2\inputfile.ini"] NEQ  (  
for /F "eol=; tokens=1,2 delims==" %i in ('find /i "Abstand=" "C:\Dokumente und  
Einstellungen\Tester\Desktop\Screenshooter\Version2\inputfile.ini"') do set Abstand  
=%j
 for /F "eol=; tokens=1,2 delims==" %i in ('find /i "Dauer=" "C:\Dokumente und E  
instellungen\Tester\Desktop\Screenshooter\Version2\inputfile.ini"') do set Dauer=%j  

 if exist "inputfile.txt" del "inputfile.txt"  
 for /F "eol=; tokens=1,2 delims==" %i in ('find /i "FTP=" "C:\Dokumente und Ein  
stellungen\Tester\Desktop\Screenshooter\Version2\inputfile.ini"') do echo %j 1>>"in  
putfile.txt"  
)  else (
set /a Abstand=2
 set /a Dauer=6

 echo open ftphost..de  1>"inputfile.txt"  
 echo Agent012  1>>"inputfile.txt"  
 echo ***  1>>"inputfile.txt"  
 echo binary   1>>"inputfile.txt"  

)

C:\Dokumente und Einstellungen\Tester>set Abstand=

C:\Dokumente und Einstellungen\Tester>set Dauer=

C:\Dokumente und Einstellungen\Tester>set Dauer=4

C:\Dokumente und Einstellungen\Tester>set Dauer=2

C:\Dokumente und Einstellungen\Tester>echo  1>>"inputfile.txt"  

C:\Dokumente und Einstellungen\Tester>echo open ftphostTEST..de 1>>"inputfile.  
txt"  

C:\Dokumente und Einstellungen\Tester>echo Agent012 1>>"inputfile.txt"  

C:\Dokumente und Einstellungen\Tester>echo *** 1>>"inputfile.txt"  

C:\Dokumente und Einstellungen\Tester>echo Binary 1>>"inputfile.txt"  

C:\Dokumente und Einstellungen\Tester>echo cd html 1>>"inputfile.txt"  

C:\Dokumente und Einstellungen\Tester>echo cd screener 1>>"inputfile.txt"  

C:\Dokumente und Einstellungen\Tester>set "ScrshotName=screenshot"  

C:\Dokumente und Einstellungen\Tester>set "ScrshotType=jpg"  

C:\Dokumente und Einstellungen\Tester>del screenshot*.jpg  2>nul

C:\Dokumente und Einstellungen\Tester>set /a Anzahl=2/+100001

C:\Dokumente und Einstellungen\Tester>for /L %i in (100001 1 0) do call :Snap %i

C:\Dokumente und Einstellungen\Tester>for %i in ("screenshot*.jpg") do echo put "%i  
"  1>>"inputfile.txt"  

C:\Dokumente und Einstellungen\Tester>echo bye  1>>"inputfile.txt"  

C:\Dokumente und Einstellungen\Tester>ftp -s:"inputfile.txt"  
ftp> ECHO ist eingeschaltet (ON).
Ungültiger Befehl
ftp> open ftphostTEST..de
Verbindung mit ftphostTEST..de wurde hergestellt.
220 FTP Server ready.
Benutzer (ftphostTEST..de:(none)):
331 Password required for Agent012.

230 User Agent012 logged in.
ftp> Binary
250 CWD command successful
ftp> cd html
250 CWD command successful
ftp> cd screener
250 CWD command successful
ftp> bye
221 Goodbye.

C:\Dokumente und Einstellungen\Tester>pause
Drücken Sie eine beliebige Taste . . .

Mit integrierten Daten geht es wieder...

@bastla

Schön das alles in Butter ist. :0) Hätten ja drüber sprechen können.

Back2Topic

Genial zu sehen wie Ihr Euch ergänzt. Bin mal auf deine Variante gespannt.

Gruß Soidberg
bastla
bastla 11.06.2007 um 22:41:55 Uhr
Goto Top
Hallo Soidberg!

... 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 ... face-wink

Grüße
bastla
Biber
Biber 11.06.2007 um 22:56:17 Uhr
Goto Top
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:

...
:::::::::::::::::::::::::::::::::::::::::::::
::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
:::::::::::::::::::::::::::::::::::::::::::::
...den würde ich, wenn es schon professionell aussehen soll, so formuli/formatieren:
...
:::::::::::::::::::::::::::::::::::::::::::::
::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
:::::::::::::::::::::::::::::::::::::::::::::
... dann ist es richtig wartbar. face-wink

Ansonsten: Respekt!

Biber
Soidberg
Soidberg 11.06.2007 um 23:09:12 Uhr
Goto Top
@bastla

Auch hier haben wir ein Problem:

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Dokumente und Einstellungen\Tester>cd C:\Dokumente und Einstellungen\Tester\Desktop
\Screenshooter\Version2

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>screen.bat con
fig.ini

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>set /a Nummer=
100001

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>set "Input=inp  
utfile.txt"  

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>set "ftpInit=f  
tpinit.txt"  

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>if exist "ftpi  
nit.txt" del "ftpinit.txt"  

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>if [config.ini
] ==  goto :Defaults

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>for /F "eol=;  
tokens=2 delims==" %i in ('find /i "Abstand" "config.ini"') do set Abstand=%i  

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>for /F "eol=;  
tokens=2 delims==" %i in ('find /i "Dauer" "config.ini"') do set Dauer=%i  

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>set Dauer=4

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>set Dauer=2

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>for /F "eol=;  
tokens=2 delims==" %i in ('find /i "FTP" "config.ini"') do echo %i 1>>"ftpinit.t  
xt"  

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>echo open ftphost12.de 1>>"ftpinit.txt"  

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>echo Agent012 1>
>"ftpinit.txt"  

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>echo ******
 1>>"ftpinit.txt"  

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>echo Binary 1>
>"ftpinit.txt"  

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>echo cd html 1
>>"ftpinit.txt"  

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>echo cd screen
er 1>>"ftpinit.txt"  

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>goto :weiter

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>set "ScrshotNa  
me=screenshot"  

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>set "ScrshotTy  
pe=jpg"  

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>del "screensho  
t*.jpg"  2>nul  

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>set /a Anzahl=
2/+100001

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>for /L %i in (
100001 1 0) do call :SnapAndFtp %i

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>goto :eof

C:\Dokumente und Einstellungen\Tester\Desktop\Screenshooter\Version2>

Die .bat fängt bei einer Übergabe nicht an Bilder zu machen, es endet wie oben zu sehen.

@Biber

Hast recht aber das wäre bestimmt noch geändert worden (ist mir auch aufgefallen und hätte es später selber korrigiert), Maniküre kommt zuletzt, wenn die Routine an sich steht. Außerdem wollte ich meine Helfer nicht "unnötig" korrigieren.

Zitat=Mein Lehrmeister
Um eine Schraube nachzuziehen bestellt man ja auch keine Handwerkercrew.
Zitat Ende

Dennoch, Danke für den schriftlichen Hinweis. Bist halt auch ein Perfektionist. :0)

Gruß Soidberg
bastla
bastla 11.06.2007, aktualisiert am 18.10.2012 um 18:32:04 Uhr
Goto Top
@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:
:::::::::::::::::::::::::::::::::::::::::::::
::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
bastla
bastla 11.06.2007 um 23:14:49 Uhr
Goto Top
Hallo Soidberg!

Und Du bist ganz sicher, dass es in Deiner "config.ini" eine Zeile
Abstand=2
und nicht 2 Zeilen mit "Dauer=" gibt?

Grüße
bastla
Biber
Biber 11.06.2007 um 23:50:43 Uhr
Goto Top
...für bastlas scheinheilige Frage würde sprechen:
 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
miniversum
miniversum 12.06.2007 um 08:44:57 Uhr
Goto Top
@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
Soidberg
Soidberg 12.06.2007 um 13:07:14 Uhr
Goto Top
Recht habt Ihr, habe es geändert.

Muss aber dennoch nochmal testen.

@bastla

Ich werde berichten...

EDIT

Also bei mir funktionert der Code. Ich habe allerdings mal angefangen das ganze etwas umzustellen.

Ordneraufbau: Stammordner--->Dataordner

Ich habe mir eine Start.bat gezimmert die jetzt im Stammordner liegt. Hier der simple Code:

Echo off

cd data

if exist screen2ftp.ini goto :CONFIGSTART
screen2ftp.bat
goto :eof
:CONFIGSTART
screen2ftp.bat screen2ftp.ini
:eof

unsere screen2ftp.bat liegt jetzt im Dataordner. Hier der genutzte Code:

@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=2
set /a Dauer=6

:::::::::::::::::::::::::::::::::::::::::::::
::ftpinit, falls nicht als Argument übergeben
(
echo open ftphost.iberia.de
echo Kundenbetreuung
echo ******
echo binary 
echo cd html
echo cd KDbetreuung

)>"%ftpInit%"  
::ftpinit-Ende
:::::::::::::::::::::::::::::::::::::::::::::

:weiter
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
<b>del "%Input%"</b>  
<b>del "%ftpInit%"</b>  
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%"  
<b>del "%ScrshotName%*.%ScrshotType%" 2>nul</b>  
if "%1" neq "%Anzahl%" ping -n %Abstand% 127.0.0.1 >nul  
goto :eof

Desweiteren habe ich eine del-Zeile mehr gesetzt um die Bilder direkt nach dem Upload wieder löschen zu lassen.

Die screen2ftp.ini sieht (immernoch) so aus:

;Dauer in Sekunden
Dauer=4
;Abstand in Sekunden
Abstand=2

;FTPDaten
FTP=open ftphost.iberia.de
FTP=Berater13
FTP=*****
FTP=Binary
FTP=cd html
FTP=**cd Berater13**

Ablauf

Die Berater kopieren (falls überhaupt nötig) Ihre Screen2ftp.ini in das "Data" Verzeichnis, packen das ganze und versenden es an den Kunden.

Dieser startet die Start.bat und es wird die screen2ftp.ini übergeben. Wenn keine screen2ftp.ini vorhanden ist werden natürlich die intergrierten Daten verwendet.

Letzte Wünsche

Die Dateien:

- inputfile.txt
- ftpinit.txt

von der Platte putzen wen alles erledigt ist. Sprich, wenn alles hochgeladen wurde und die Dateien nicht mehr gebraucht werden sollen sie gelöscht werden.

P.S Die Dateinamen (ini, bat etc) haben jetzt Finalstatus *lach*, wir nähern uns dem Ende. :0) Wenn ich ehrlich bin hat es richtig Spaß gemacht mit Euch dran zu feilen, vielen lieben Dank dafür.

Liebe Grüße

Soidberg

EDIT2: Korrektur siehe bastla´s Post. und miniversum´s "del" Vorschlag
bastla
bastla 12.06.2007 um 18:43:41 Uhr
Goto Top
Hallo Soidberg!

Das Löschen der beiden ".txt"-Dateien kann unmittelbar nach der "for /l"-Schleife erfolgen.
Maniküre face-wink:
cd "%CD%\data"  
gefällt mir noch immer nicht besser als
cd data
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
Soidberg
Soidberg 12.06.2007, aktualisiert am 18.10.2012 um 18:32:04 Uhr
Goto Top
Hallo Soidberg!

Das Löschen der beiden
".txt"-Dateien kann unmittelbar
nach der "for /l"-Schleife
erfolgen.
Maniküre face-wink:
cd "%CD%\data"  
> 
gefällt mir noch immer
nicht besser als
cd data
> 
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

Wieso eigentlich, wo ist den der Unterschied? Ich bastle sehr gerne Portables und da arbeite ich sehr oft mit %CD%. Habe ich mir wohl einfach angewöhnt.

Danke für den Tipp, würde umgesetzt :0)

@topic

Fertig, es ist ein nützliches kleines Tool entstanden. Das ganze wird noch heute Abend compiliert und morgen in einem ersten großen Betatest durch mehrere Mitarbeiter getestet.

Der Code ist für Schnippselsammler in meinen Beitrag zu finden:

Screenshot erstellen (mit Zusatztool) und via ftp hochladen

@mitbastler (miniversum, Biber, Bastla)

Ich möchte an dieser Stelle mich für die erneute Zusammenarbeit rechtherzlich bei Euch bedanken. Es macht sehr viel Spaß hier in diesem Forum, mit solchen Membern, Mods und Admin eine Zusammenarbeit pflegen zu dürfen.

*Wenn ich mir unser Projekt jetzt mal so anschaue und vom eigentlichen Zweck absehe komme ich auf die Idee das ganze beim Herr Schäuble als Entwurf einzusenden. *fg*
Schliesslich bewegt sich dieser Funktionsablauf in einer Grauzone. ;) (um es mal so zu beschreiben)

Gruß Soidberg
Biber
Biber 12.06.2007 um 19:21:09 Uhr
Goto Top
Na, dann mach ich auch noch mal Maniküre...

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
...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:
: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]
miniversum
miniversum 12.06.2007 um 21:18:21 Uhr
Goto Top
Ich hab auch noch ne Anmerkung die dem Biber wol entgangen ist :D
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 "%Input%"
del "%ftpInit%"

miniversum
Biber
Biber 12.06.2007 um 22:06:38 Uhr
Goto Top
@Soidberg, bastla, miniversum (an Euch als die Bis-zur-Final-Treiber )

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
Soidberg
Soidberg 13.06.2007 um 00:50:03 Uhr
Goto Top
@bastla

Also ich habe es jetzt mal so eingebaut:

@echo on & setlocal

: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%"  
::ftpinit-Ende

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%"  
pause
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  
pause
goto :eof

Allerdings habe ich wohl einen Fehler gemacht und finde Ihn nicht. Ich hatte mal um zu sehen was passiert vor jedes goto :eof eine pause gesetzt aber ich bekomme immer noch nix angezeigt. Die Shell schließt einfach.

@miniversum

Absolut Logisch und wird sofort übernommen. :0)

@Biber

Miniversum´s Korrektur hänge ich sofort an und wenn Bastla´s Vorschlag auch soweit funktioniert kommt er auch hinzu. Dieser Beitrag hier kann dann sogar gelöscht werden (um die Übersicht zu behalten) da (sollte der Fehler in Bastlascode sein) er Ihn ja auch oben editiert.

Du kannst dann aber gerne den Thread erstmal schließen. Wenn etwas ist weiß ich wie ich Dich erreiche ;0)

Gruß Soidberg
bastla
bastla 13.06.2007 um 11:12:22 Uhr
Goto Top
Hallo Soidberg!

Nachdem diverse von Dir doch eher lieblos entfernte Zeilen (Maniküre mit Seitenschneider? face-wink) 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
Soidberg
Soidberg 13.06.2007 um 18:47:59 Uhr
Goto Top
Jepp, so ist es. War wohl doch zu unausgeschlafen, das hat man nun davon :0)

Liebe Grüße & dickes Danke für die Unterstützung

</Brainstorming>

Soidberg