Discussion:
Batch-Schleife?
(zu alt für eine Antwort)
Anselm Rapp
2011-08-13 16:20:47 UTC
Permalink
Hallo,

ich will unter Windows XP ein Skript erstellen, das mir von
verschiedenen URLs Dateien abholt und sie mit Datum und Uhrzeit
umbenennt - das ist alles. Die Erzeugung des Datums hat man mir hier
freundlicherweise schon gezeigt.

Wozu ich noch keine Lösung habe, ist die mehrfache Abarbeitung des
Skripts mit unterschiedlichen URLs. Keine Lösung ist es sicher, das -
allerdings nicht lange - Skript beispielsweise zehn Mal untereinander zu
setzen. So sieht mein Fragment bisher aus:

rem Folgende Werte der Variablen Domain sollen abgearbeitet werden:
set Domain=meinedomain.tld
set Domain=deinedomain.tld
set Domain=seinedomain.tld
rem usw.

"C:\Programme\WS_FTP Pro\ftpsync" %Domain%.ctl
rem Abholung von datei.txt per WS_FTP Synchronisierungs-Utility.

rem Datums-Erzeugung in die Variable zeit (ist gelöst)

ren datei.txt %Domain%_%zeit%_datei.txt

Vielleicht ist mein Ansatz falsch. Jedenfalls muss da sicher eine
Schleife außen rum. Aber keine Ahnung, wie die Variablen mit den
unterschiedlichen Inhalten abgearbeitet werden können. Vielleicht geht
es auch gar nicht?

Vielen Dank im Voraus,

Anselm
--
Bitte in der Newsgroup antworten.
Stefan Reuther
2011-08-13 18:56:20 UTC
Permalink
Hallo,
Post by Anselm Rapp
Wozu ich noch keine Lösung habe, ist die mehrfache Abarbeitung des
Skripts mit unterschiedlichen URLs. Keine Lösung ist es sicher, das -
allerdings nicht lange - Skript beispielsweise zehn Mal untereinander zu
setzen.
Unter MS-DOS würde man mehrere Skripte machen, eins.bat macht
call zwei.bat meinedomain.tld
call zwei.bat deinedomain.tld
call zwei.bat seinedomain.tld
und zwei.bat macht den Download. Der Parameter kommt als '%1' an.
Experten fummeln das dann in eine Batchdatei, die anhand eines weiteren
Parameters unterscheidet, ob sie eins.bat oder zwei.bat ist.

Unter cmd.exe (also Windows XP) kann man das in ein Skript packen:
call :unterprogramm a
call :unterprogramm b
call :unterprogramm c
goto :eof

:unterprogramm
rem hier der Download, Parameter ist %1
goto :eof
Lies dir einfach mal 'help call' und 'help goto' durch.

Sollte es sich bei den Parametern um einzelne Worte handeln, kommt auch
noch 'for' in Betracht.


Stefan
Anselm Rapp
2011-08-15 15:06:35 UTC
Permalink
Post by Stefan Reuther
Post by Anselm Rapp
Wozu ich noch keine Lösung habe, ist die mehrfache Abarbeitung des
Skripts mit unterschiedlichen URLs. Keine Lösung ist es sicher, das -
allerdings nicht lange - Skript beispielsweise zehn Mal untereinander zu
setzen.
[...]
call :unterprogramm a
call :unterprogramm b
call :unterprogramm c
goto :eof
:unterprogramm
rem hier der Download, Parameter ist %1
goto :eof
Lies dir einfach mal 'help call' und 'help goto' durch.
Sollte es sich bei den Parametern um einzelne Worte handeln, kommt auch
noch 'for' in Betracht.
Vielen Dank. Herbert Kleebauer hat es mir noch etwas bequemer gemacht.

Gruß, Anselm
--
Bitte in der Newsgroup antworten.
Herbert Kleebauer
2011-08-14 13:24:12 UTC
Permalink
Post by Anselm Rapp
Hallo,
ich will unter Windows XP ein Skript erstellen, das mir von
verschiedenen URLs Dateien abholt und sie mit Datum und Uhrzeit
umbenennt - das ist alles. Die Erzeugung des Datums hat man mir hier
freundlicherweise schon gezeigt.
Wozu ich noch keine Lösung habe, ist die mehrfache Abarbeitung des
Skripts mit unterschiedlichen URLs. Keine Lösung ist es sicher, das -
allerdings nicht lange - Skript beispielsweise zehn Mal untereinander zu
set Domain=meinedomain.tld
set Domain=deinedomain.tld
set Domain=seinedomain.tld
rem usw.
"C:\Programme\WS_FTP Pro\ftpsync" %Domain%.ctl
rem Abholung von datei.txt per WS_FTP Synchronisierungs-Utility.
rem Datums-Erzeugung in die Variable zeit (ist gelöst)
ren datei.txt %Domain%_%zeit%_datei.txt
Falls die Anzahl der Dateien größer ist, ist es übersichtlicher die
Namen in einer extra Datei (z.B. liste.txt) zu speicher. Dann kann
man auch sehr schell mal einige auskommentieren in dem man ein
; am Anfang der Zeile einfügt.

@echo off
for /f %%i in (liste.txt) do (
echo Bearbeite %%i
"C:\Programme\WS_FTP Pro\ftpsync" %%i.ctl
)


liste.txt:

meinedomain.tld
; dies ist ein Kommentar und die nächste Zeile auch
; deinedomain.tld
seinedomain.tld
Anselm Rapp
2011-08-15 15:18:56 UTC
Permalink
Post by Herbert Kleebauer
Post by Anselm Rapp
Wozu ich noch keine Lösung habe, ist die mehrfache Abarbeitung des
Skripts mit unterschiedlichen URLs. Keine Lösung ist es sicher, das -
allerdings nicht lange - Skript beispielsweise zehn Mal untereinander zu
set Domain=meinedomain.tld
set Domain=deinedomain.tld
set Domain=seinedomain.tld
rem usw.
"C:\Programme\WS_FTP Pro\ftpsync" %Domain%.ctl
rem Abholung von datei.txt per WS_FTP Synchronisierungs-Utility.
rem Datums-Erzeugung in die Variable zeit (ist gelöst)
ren datei.txt %Domain%_%zeit%_datei.txt
Falls die Anzahl der Dateien größer ist, ist es übersichtlicher die
Namen in einer extra Datei (z.B. liste.txt) zu speicher. Dann kann
man auch sehr schell mal einige auskommentieren in dem man ein
; am Anfang der Zeile einfügt.
@echo off
for /f %%i in (liste.txt) do (
echo Bearbeite %%i
"C:\Programme\WS_FTP Pro\ftpsync" %%i.ctl
)
meinedomain.tld
; dies ist ein Kommentar und die nächste Zeile auch
; deinedomain.tld
seinedomain.tld
Mein Dank kommt nicht aus Undankbarkeit spät, sondern weil ich versucht
habe, alles zuvor umzusetzen. Es funktioniert bestens, mit einer
Ausnahme, wegen eines Denkfehlers meinerseits. So sieht das Skript nun aus:

@echo off
echo Neueste Backup-Dateien muessen auf dem Server vorliegen
pause

rem Datum yyyymmddhhmmss
:loop
set zeit=%date:~6,4%%date:~3,2%%date:~0,2%%time:~0,2%%time:~3,2%%time:~6,2%
if not
%zeit%==%date:~6,4%%date:~3,2%%date:~0,2%%time:~0,2%%time:~3,2%%time:~6,2%
goto :loop

for /f %%i in (liste.txt) do (
echo Bearbeite %%i
"C:\Programme\WS_FTP Pro\ftpsync.exe" "C:\Dokumente und
Einstellungen\[Benutzer]\Eigene Dateien\WS_FTP\backup_%%i.ctl"
ren backup.tar.gz %%i_home_%zeit%.tar.gz
pause
)

echo Fertig!
pause

Der Denkfehler liegt in der Zeile

ren backup.tar.gz %%i_home_%zeit%.tar.gz

Das Verzeichnis ist gar nicht definiert, und es soll pro Lauf ein
anderes Unterverzeichnis sein, also z. B.

cd \backups
cd backup1
ren backup.tar.gz %%i_home_%zeit%.tar.gz
cd ..
cd backup2
ren backup.tar.gz %%i_home_%zeit%.tar.gz
cd ..
usw.

Kann man der liste.txt den Pfad auch noch mitgeben? Tut mir Leid, aber
das habe ich völlig übersehen. Notfalls mache ich alles in einem
Verzeichnis, denn die Dateien sind ja durch die Domain im Namen
unverwechselbar.

Dank und Gruß,

Anselm
--
Bitte in der Newsgroup antworten.
Herbert Kleebauer
2011-08-15 19:49:29 UTC
Permalink
Post by Herbert Kleebauer
Post by Anselm Rapp
meinedomain.tld
; dies ist ein Kommentar und die nächste Zeile auch
; deinedomain.tld
seinedomain.tld
@echo off
echo Neueste Backup-Dateien muessen auf dem Server vorliegen
pause
rem Datum yyyymmddhhmmss
:loop
set zeit=%date:~6,4%%date:~3,2%%date:~0,2%%time:~0,2%%time:~3,2%%time:~6,2%
if not
%zeit%==%date:~6,4%%date:~3,2%%date:~0,2%%time:~0,2%%time:~3,2%%time:~6,2%
goto :loop
for /f %%i in (liste.txt) do (
echo Bearbeite %%i
"C:\Programme\WS_FTP Pro\ftpsync.exe" "C:\Dokumente und
Einstellungen\[Benutzer]\Eigene Dateien\WS_FTP\backup_%%i.ctl"
ren backup.tar.gz %%i_home_%zeit%.tar.gz
pause
)
echo Fertig!
pause
Der Denkfehler liegt in der Zeile
ren backup.tar.gz %%i_home_%zeit%.tar.gz
Das Verzeichnis ist gar nicht definiert,
Welches Verzeichnis? Ein "rename" geht doch nur im selben Verzeichnis, d.h.
wo immer WS_FTP die Datei backup.tar.gz abgelegt hat ist dann auch die
umbenannte Datei. Oder meinst du ein "move"?
Post by Herbert Kleebauer
und es soll pro Lauf ein anderes Unterverzeichnis sein, also z. B.
Meinst du mit "pro Lauf", daß jedesmal wenn die Batchdatei ausgeführt wird
neue Unterverzeichniss erzeugt werden sollen oder soll es für jede Domain
eine getrenntes Unterverzeichnis geben?
Post by Herbert Kleebauer
cd \backups
cd backup1
ren backup.tar.gz %%i_home_%zeit%.tar.gz
cd ..
cd backup2
ren backup.tar.gz %%i_home_%zeit%.tar.gz
cd ..
usw.
Kann man der liste.txt den Pfad auch noch mitgeben? Tut mir Leid, aber
das habe ich völlig übersehen. Notfalls mache ich alles in einem
Verzeichnis, denn die Dateien sind ja durch die Domain im Namen
unverwechselbar.
Falls du für jede Domain ein Unterverzeichnnis willst:

liste.txt:

meinedomain.tld c:\pfad1
deinedomain.tld c:\pfad2
seinedomain.tld c:\pfad3

%%i enthält dann den Domainnamen und %%j den Pfad

for /f "tokens=1,*" %%i in (liste.txt) do (
echo Bearbeite %%i
echo Pfad %%j
)



%%I
Anselm Rapp
2011-08-15 20:11:05 UTC
Permalink
Post by Herbert Kleebauer
Post by Anselm Rapp
Der Denkfehler liegt in der Zeile
ren backup.tar.gz %%i_home_%zeit%.tar.gz
Das Verzeichnis ist gar nicht definiert,
Welches Verzeichnis? Ein "rename" geht doch nur im selben Verzeichnis, d.h.
wo immer WS_FTP die Datei backup.tar.gz abgelegt hat ist dann auch die
umbenannte Datei. Oder meinst du ein "move"?
Ich habe mich wohl ungenau ausgedrückt. Es gibt pro Domain ein
Unterverzeichnis, in das WS_FTP die Datei backup.tar.gz ablegt.

Um umbenennen zu können, muss ich ja erst mal jeweils in das
Unterverzeichnis der Domain kommen, wo ich umbenennen will.
Post by Herbert Kleebauer
Post by Anselm Rapp
und es soll pro Lauf ein anderes Unterverzeichnis sein, also z. B.
Meinst du mit "pro Lauf", daß jedesmal wenn die Batchdatei ausgeführt wird
neue Unterverzeichniss erzeugt werden sollen oder soll es für jede Domain
eine getrenntes Unterverzeichnis geben?
Weder noch, siehe oben. Jedes Mal, wenn die Batchdatei eine Schleife
durchläuft, muss ich das Unterverzeichnis wechseln.
Post by Herbert Kleebauer
meinedomain.tld c:\pfad1
deinedomain.tld c:\pfad2
seinedomain.tld c:\pfad3
%%i enthält dann den Domainnamen und %%j den Pfad
Das enthält die mir fehlende Information. Damit sollte ich zurechtkommen.
Post by Herbert Kleebauer
for /f "tokens=1,*" %%i in (liste.txt) do (
echo Bearbeite %%i
echo Pfad %%j
)
%%I
Ja, genau. Super!

Vielen Dank,

Anselm
--
Bitte in der Newsgroup antworten.
Loading...