Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Bat Datei zum Täglichen Download mit Aktuellem Datum im Datei Namen

Frage Entwicklung Batch & Shell

Mitglied: Tristement

Tristement (Level 1) - Jetzt verbinden

15.07.2013 um 21:22 Uhr, 3213 Aufrufe, 29 Kommentare, 2 Danke

Hallo zusammen,

ich knobel seit einigen Tagen an einer Bat Datei dir mir mein Tägliches Arbeitsleben ein wenig erleichtert.

Ich muss jeden Tag vom FTP server einer Datei herunterladen und möchte dieses halt via Batschscript und Taskplaner automatisieren.

Momentan hänge ich aber leider fest und hoffe das mir hier jemand etwas helfen kann.

Problem an der geschichte ist das die Datei die ich downloaden muss immer das Datum beinhaltet vom vortag und ich nicht weiß wie ich deis realieseren kann.

Hier mal meine bisherigen versuche:

1. Meine Bat Datei:

@echo off
ftp -s:DatenHolen.ftp
Exit

2. die ftp Datei:

open ftp..de
USERNAME
PASSWORD
cd UNTERORTNERVERZEICHNISS

GET RLP_CAUSER_0128_20130715.csv

LCD Z:\Neuer Ordner\test\test3\Download

disconnect

bye


Die Datei RLP_CAUSER_0128_20130715.csv ändert sich täglich im Datum der Rest bleibt immer gleich. gibt es hier die möglichkeit zu sagen das er das aktuelle Datum Downloaden soll Minus einen Tag?

Wäre Nice wenn jemand da mal drüber schauen könnte und evt ne Lösung weiß.

Platform ist Windows 7

Mit freundlichen Grüßen
29 Antworten
Mitglied: Endoro
15.07.2013 um 21:39 Uhr
Hallo Tristement,

cmd hat vom M$ leider keine Zeitfunktionen spendiert bekommen.
Müsstest du also zu Fuss nachbauen, wenn es nicht schon mal jemand erledigt hätte
YESTERDAY.BAT

lg
Bitte warten ..
Mitglied: 76109
15.07.2013, aktualisiert um 23:47 Uhr
Hallo!

Hab als Nicht-Batcher auch mal was zusammengebastelt, bleib aber lieber bei VBS

Scheint anhand weniger Tests auch zu funktionieren, allerdings bin ich nicht sicher, ob syntaktisches alles richtig ist. Wer also Lust hat, der kann gerne daran rum/weiterbasteln
01.
@echo off & setlocal enabledelayedexpansion 
02.
 
03.
::Wert(+/-) für Tage, Wochen, Monate und Jahre, mit dem ein Datum ermittelt werden soll 
04.
set /a Value=-1 
05.
 
06.
:: Aktuelles Datum 
07.
set "DateStart=%Date%" 
08.
::Aktuelles Datum in Jahre, Monate und Tage splitten 
09.
for /f %%i in ('WMIC PATH Win32_LocalTime GET Year^,Month^,Day /Value^|findstr .') do set /a %%i 2>nul||@echo Falsches Datumsformat! & goto:eof 
10.
@echo Datum: !DateStart! (T=!Day! M=!Month! J=!Year!) 
11.
@echo. 
12.
 
13.
call :SetDateOfDays 
14.
@echo !Value! Tage  : !DateResult! 
15.
call :SetDateOfWeeks 
16.
@echo !Value! Wochen: !DateResult! 
17.
call :SetDateOfMonths 
18.
@echo !Value! Monate: !DateResult! 
19.
call :SetDateOfYears 
20.
@echo !Value! Jahre : !DateResult! 
21.
goto :eof 
22.
 
23.
::Berechnung mit Anzahl Tage 
24.
: SetDateOfDays 
25.
    call :SetDate !Year! !Month! !Day! !Value! 
26.
goto :eof 
27.
 
28.
::Berechnung mit Anzahl Wochen 
29.
: SetDateOfWeeks 
30.
    set /a Number=Value*7 
31.
    call :SetDate !Year! !Month! !Day! !Number! 
32.
goto :eof 
33.
 
34.
::Berechnung mit Anzahl Monate 
35.
: SetDateOfMonths 
36.
    set /a x=Year*12+Month+Value-1 
37.
    set /a xYY=x/12 
38.
    set /a xMM=x%%12+1 
39.
    ::Korrektur, wenn Tag > 28 auf Monat mit weniger Tagen trifft 
40.
    for /l %%i in (0,-1,-3) do call :SetDate !xYY! !xMM! !Day! %%i & if !xMM! EQU !XX! goto :eof 
41.
goto :eof 
42.
 
43.
::Berechnung mit Anzahl Jahre 
44.
: SetDateOfYears 
45.
    set /a xYY=Year+Value 
46.
    call :SetDate !xYY! !Month! !Day! 0 
47.
goto :eof 
48.
 
49.
 
50.
:: Datum berechnen 
51.
:SetDate %1 %2 %3 %4 
52.
:: Quelle: Ritchie Lawrence 
53.
    :: Func: Date from a Modified Julian Day. 
54.
    ::       Date (Day 0) is Wednesday 17th November 1858. 
55.
    set /a YY=%1,MM=%2,DD=%3,Number=%4 
56.
    set /a x=(14-MM)/12,y=YY+4800-x,d=(MM+12*x-3)*153+2,d=d/5+DD+y*365+y/4-y/100+y/400-1+Number 
57.
    set /a v1=(4*d+3)/146097,v2=(-v1*146097)/4+d,v3=(4*v2+3)/1461,v4=(-v3*1461)/4+v2,v5=(5*v4+2)/153 
58.
    set /a DD=(153*v5+2)/-5+v4+101,MM=(-v5/10)*12+v5+103,YY=v1*100+v3-4800+v5/10 
59.
    set /a XX=MM-100 
60.
 
61.
:: Ergebnis 
62.
    set "DateResult=!DD:~-2!.!MM:~-2!.!YY!" 
63.
    ::Wochentag So=1,Mo=2,Di=3,Mi=4,Do=5,Fr=6,Sa=7 
64.
    set /a WeekDay=(d+3)%%7+1 
65.
 
66.
    ::@echo Datum    : !DateResult! 
67.
    ::@echo Wochentag: !WeekDay! 
68.
goto :eof
Wobei in Codezeile 62 das Ausgabeformat nach belieben angepasst werden kann

Quelle: hier und hier

Hier noch ne Batch mit Hilfe von VBS:
01.
@echo off & setlocal 
02.
 
03.
set "AnzahlTage=1" 
04.
 
05.
set "S=%temp%\GetStartTime.vbs" 
06.
>%S% Echo D=Date-WScript.Arguments(0):WScript.Echo Year(D)^&Right("0"^&Month(D),2)^&Right("0"^&Day(D),2) 
07.
 
08.
for /f "tokens=1" %%d in ('cscript //nologo "%S%" %AnzahlTage%') do Set "Datum=%%d" 
09.
 
10.
echo %Datum%

Gruß Dieter
Bitte warten ..
Mitglied: Tristement
16.07.2013 um 00:41 Uhr
Uff das übersteigt a bissel meine kentnisse und ich glaub das muss ich mir erst ein mal 10 Mal anschauen um so a bissel was davon zu verstehen

Problem ist halt das alles über ne Bat laufen muss da der Admin zugang dicht ist und somit nur Boardmittel möglich sind da man nix insterlieren kann bei uns auf den Pc´s.

Werd mir die ganze sache mal von der Arbeit aus anschauen da ich vom heimrechner eh net auf den Server komme da deiser nur für die Pc´s auf der Arbeit frei sind.

Aber so a bissel überfordert mit den ganzen dingern da gerade.
Bitte warten ..
Mitglied: u60u60
16.07.2013 um 02:14 Uhr
Lass dich von der yesterday.bat nicht irritieren ... downloade die komplett und leg die in ein Arbeitsverzeichnis, zusammen mit dem Rest:

Hier erst mal der grobe Ueberblick ueber den Ablauf:

schritt 1.
ausfuehren von YESTERDAY.BAT von Endoro
echo dateiname-part1%Yesterday%dateiname-part2 > ausgabe-von-yesterday-bat

schritt 2.

ftp-anweisungs-file aktuell aus 3 Einzelteilen zusammenbasteln
copy ftp-part1 + ausgabe-von-yesterday-bat + ftp-part2 DatenHolen.ftp

schritt 3.
weiter mit deinem ftp download

Wichtig bei der yesterday.bat ist, das am Schluss 3 Variablen in weiteren Batches weiter verwendet werden koennen

Ich habe 4 (nach Aufruf 6) Dateien vorliegen:
(datei 1)
von http://www.robvanderwoude.com/datetiment.php#Download
die datei yesterday.bat (komplett!) downloaden

(datei 2) t1.bat
................................................
call yesterday.bat

REM --- benutze die Environment Variable Yesterday
REM --- vom Output aus yesterday.bat
REM --- und schreibe die neue kommandozeile fuer ftp aufruf in ydout.dat
echo GET RLP_CAUSER_0128_%Yesterday%.csv >ydout.dat

copy ftp1dat.txt + ydout.dat + ftp1dat.txt DatenHolen.ftp
REM --- hier kann dein weiterer FTP aufruf stehen ...
REM ftp -s:DatenHolen.ftp
REM Exit
................................................

(datei 3) ftp1dat.txt (1. Haelfte deiner FTP Anweisungen)
................................................
open ftp..de <== ist das hier richtig mit 2 Punkten?!?
USERNAME
PASSWORD
cd UNTERORTNERVERZEICHNISS
................................................

(datei 4) ftp2dat.txt (letzte Haelfte deiner FTP Anweisungen)
................................................
LCD Z:\Neuer Ordner\test\test3\Download

disconnect

bye
................................................

(datei 5) wird in t1.bat erstellt und hat nach Ausfuehrung nachfolgenden Inhalt
morgen natuerlich eins weiter
.................................................
GET RLP_CAUSER_0128_20130715.csv
.................................................

(datei 6) DatenHolen.ftp wird in t1.bat erstellt

---

laeuft sowohl unter WinXP, alsauch Windows7

sicherlich liesse sich das ganze noch mit pipes weiter vereinfachen

regards, uli
Bitte warten ..
Mitglied: bastla
16.07.2013 um 09:03 Uhr
Hallo @ All!

Natürlich ist es hybsch, eine Batch-only-Lösung zu verwenden - aber zumeist schadet ein wenig "Inline-VBS" auch nicht wirklich; wenn das in diesem Fall auch so ist, ein Beispiel von mehreren, die sich hier finden lassen sollten: Dateien mit dem Datum von gestern in einen Ordner kopieren ...

Grüße
bastla
Bitte warten ..
Mitglied: Invisan
16.07.2013, aktualisiert um 10:49 Uhr
Moin Tristement.

Hier noch ein nur auf Batch basiernder Lösungsansatz um das aktuelle Datum -1 Tag zu bekommen.

Die Profis hier finden sicher nen schöneren Weg aber für mich tut das teil das was es soll ^^

01.
@echo off &setlocal 
02.
for /f "tokens=1 delims=." %%a in ('date /t') do ( 
03.
  set "t=%%a" 
04.
  setlocal enabledelayedexpansion 
05.
  set /a t=!t!-1 
06.
  echo Tag: !t! 
07.
08.
for /f "tokens=2 delims=." %%b in ('date /t') do ( 
09.
  set "m=%%b" 
10.
  echo Monat: !m! 
11.
12.
for /f "tokens=3 delims=. " %%c in ('date /t') do ( 
13.
  set "y=%%c" 
14.
  echo Jahr: !y! 
15.
16.
 
17.
echo !y!!m!!t! 
18.
 
Die Echos sind nur zur Veranschauung der ganzen Sache.

Im Prinzip holt sich das Skript über Date /t das aktuelle Datum trennt es an den . auf (Da das Datum im Format TT.MM.YYYY ist) und ändert es in den For-Schleifen so ab das jeweils nur alles vor dem ersten Punkt (!t!) nach dem ersten und vor dem 2ten Punkt (!m!) und nach dem ersten und 2ten Punkt (!y!) genutzt wird.

Das ganze wird dann als Tag !t! Monat !m! und Jahr !y! in die jeweiligen variablen geschrieben und kann dann in deinem Skript mit !y!!m!!t! für den Namen genutzt werden.


Mit freundlichen Grüßen Invi
Bitte warten ..
Mitglied: bastla
16.07.2013 um 10:34 Uhr
Hallo Invisian!

Eine Ergänzug würde ich auf jeden Fall noch vorschlagen (wenn Du "Code"-Formatierung verwendet hättest, könnte ich Dir auch die passende Zeilennummer nennen): Platziere unmittelbar vor der Zeile "setlocal enabledelayedexpansion"
if %t%==1 (echo Heute leider nicht verwendbar - versuchen Sie es morgen wieder! & pause & goto :eof)
Grüße
bastla
Bitte warten ..
Mitglied: Invisan
16.07.2013 um 10:51 Uhr
Zitat von bastla:
Hallo Invisian!

Eine Ergänzug würde ich auf jeden Fall noch vorschlagen (wenn Du "Code"-[http://www.administrator.de/faq/20
Formatierung] verwendet hättest, könnte ich Dir auch die passende Zeilennummer nennen): Platziere unmittelbar vor der
Zeile "setlocal enabledelayedexpansion"
if %t%==1 (echo Heute leider nicht verwendbar - versuchen Sie es morgen wieder! & pause 
> & goto :eof) 
> 
Grüße
bastla

Hallo bastla stimmt da hast du recht bei nem -1 wären wir beim 01.08.2013 ja bei 0.

Mein Fehler ^^

Aber wie gesagt war halt ein schneller Versuch
Bitte warten ..
Mitglied: Invisan
16.07.2013 um 14:14 Uhr
So hier jetzt nochmal das neue Script diesmal mit Berücksichtigung des ersten und ebenfalls mit Berücksichtigung von Schaltjahren.


01.
@echo off &setlocal 
02.
for /f "tokens=3 delims=. " %%c in ('date /t') do ( 
03.
setlocal enabledelayedexpansion 
04.
  set "y=%%c" 
05.
06.
for /f "tokens=2 delims=." %%b in ('date /t') do ( 
07.
setlocal enabledelayedexpansion 
08.
  set "m=%%b" 
09.
10.
for /f "tokens=1 delims=." %%a in ('date /t') do ( 
11.
setlocal enabledelayedexpansion 
12.
  set "t=%%a" 
13.
  if !t! ==01 goto :checkmonth 
14.
  if !t! NEQ 01 goto :day 
15.
   
16.
  :checkmonth 
17.
  if !m! ==01 goto :jan 
18.
  if !m! ==02 goto :feb 
19.
  if !m! ==03 goto :mar 
20.
  if !m! ==04 goto :apr 
21.
  if !m! ==05 goto :mai 
22.
  if !m! ==06 goto :jun 
23.
  if !m! ==07 goto :jul 
24.
  if !m! ==08 goto :aug 
25.
  if !m! ==09 goto :sep 
26.
  if !m! ==10 goto :okt 
27.
  if !m! ==11 goto :nov 
28.
  if !m! ==12 goto :dez 
29.
	 
30.
	 
31.
	:jan 
32.
				set /a y=!y!-1 
33.
				set m=12 
34.
				set t=31 
35.
				goto end 
36.
			     
37.
	 
38.
	:feb 
39.
				set m=01 
40.
				set t=31 
41.
				goto end 
42.
	 
43.
				 
44.
	:mar 
45.
				set /a s=!y!-2000 
46.
				goto check 
47.
 
48.
	:check 
49.
				if !s! GTR 4 goto :minus 
50.
				if !s! LSS 4 goto :keinschaltjahr 
51.
				if !s! == 4 goto :schaltjahr 
52.
 
53.
	:minus 
54.
				set /a s=!s!-4 
55.
				goto check 
56.
 
57.
		 
58.
	:keinschaltjahr		 
59.
				set m=02 
60.
				set t=28 
61.
				goto end 
62.
 
63.
			 
64.
	:schaltjahr 
65.
				set m=02 
66.
				set t=29 
67.
				goto end 
68.
	 
69.
	:apr 
70.
				set m=03 
71.
				set t=31 
72.
				goto end 
73.
 
74.
	:mai 
75.
				set m=04 
76.
				set t=30 
77.
				goto end 
78.
 
79.
	:jun 
80.
				set m=05 
81.
				set t=31 
82.
				goto end 
83.
				 
84.
	:jul 
85.
				set m=06 
86.
				set t=30 
87.
				goto end 
88.
				 
89.
	:aug 
90.
				set m=07 
91.
				set t=31 
92.
				goto end 
93.
				 
94.
	:sep 
95.
				set m=08 
96.
				set t=31 
97.
				goto end 
98.
				 
99.
	:okt 
100.
				set m=09 
101.
				set t=30 
102.
				goto end 
103.
				 
104.
	:nov 
105.
				set m=10 
106.
				set t=31 
107.
				goto end 
108.
				 
109.
	:dez 
110.
				set m=11 
111.
				set t=30 
112.
				goto end 
113.
				 
114.
	:day 
115.
				set /a t=!t!-1 
116.
				goto end 
117.
			 
118.
	:end 
119.
				echo !y!!m!!t! 
120.
)
Bitte warten ..
Mitglied: Tristement
17.07.2013, aktualisiert um 07:36 Uhr
Hallo u60u60

Da deine Anleitung an und für sich bisher für mich am verständlichsten war habe ich die mal versucht diese zu nehmen, jedoch scheitert es noch an einiges stellen bei mir ! Ich schreibe mal unter den Zeilen die du verfasst hast wie und wo es noch bei mir a bissel hängt , da ich leider bisher mit Bat keine erfahrungen habe und mir halt nur alles aus dem netz zusammen suche bitte ich um ein wenig verständniss


Zitat von u60u60:
Lass dich von der yesterday.bat nicht irritieren ... downloade die komplett und leg die in ein Arbeitsverzeichnis, zusammen mit
dem Rest:

Hier erst mal der grobe Ueberblick ueber den Ablauf:

schritt 1.
ausfuehren von YESTERDAY.BAT von Endoro
echo dateiname-part1%Yesterday%dateiname-part2 > ausgabe-von-yesterday-bat

*TRISTEMENT* : hier hänge ich schon fest , wo genau kommt der befehl rein?

schritt 2.

ftp-anweisungs-file aktuell aus 3 Einzelteilen zusammenbasteln
copy ftp-part1 + ausgabe-von-yesterday-bat + ftp-part2 DatenHolen.ftp

*TRISTEMENT* : ich habe wirklich keine ahnung was das hier zu bedeuten hat

schritt 3.
weiter mit deinem ftp download

Wichtig bei der yesterday.bat ist, das am Schluss 3 Variablen in weiteren Batches weiter verwendet werden koennen

*TRISTEMENT* :nun kommt wirklich nur noch Bahnhof bei mir an

Ich habe 4 (nach Aufruf 6) Dateien vorliegen:
(datei 1)
von http://www.robvanderwoude.com/datetiment.php#Download
die datei yesterday.bat (komplett!) downloaden

*TRISTEMENT* :Habe ich gemacht und diese als Yesterday.bat abgespeichert

(datei 2) t1.bat
................................................
call yesterday.bat

REM --- benutze die Environment Variable Yesterday
REM --- vom Output aus yesterday.bat
REM --- und schreibe die neue kommandozeile fuer ftp aufruf in ydout.dat
echo GET RLP_CAUSER_0128_%Yesterday%.csv >ydout.dat

copy ftp1dat.txt + ydout.dat + ftp1dat.txt DatenHolen.ftp
REM --- hier kann dein weiterer FTP aufruf stehen ...
REM ftp -s:DatenHolen.ftp
REM Exit

*TRISTEMENT* :t1.bat wurde erstellt und mit dem Code von dir versehen, aber was bedeutet die Zeile hier kann dein Weiterer FTP aufruf stehen? Muss ich etwas von mir rein oder nicht?

................................................

(datei 3) ftp1dat.txt (1. Haelfte deiner FTP Anweisungen)
................................................
open ftp..de <== ist das hier richtig mit 2 Punkten?!?
USERNAME
PASSWORD
cd UNTERORTNERVERZEICHNISS

*TRISTEMENT* :Nein, die 2 Punkte sind nicht richtig da stehen normalerweise Sternchen drinne, hätte auch XXXX machen können aber die wurden hier scheinbar nicht angezteigt, ftp1dat.txt wurde auch erstellt samt FTP aufruf wie von dir beschrieben (mit meinen Zugansdaten)

................................................

(datei 4) ftp2dat.txt (letzte Haelfte deiner FTP Anweisungen)
................................................
LCD Z:\Neuer Ordner\test\test3\Download

disconnect

bye

*TRISTEMENT* :auch die ftp2dat.exe habe ich samt inhalt erstellt
................................................

(datei 5) wird in t1.bat erstellt und hat nach Ausfuehrung nachfolgenden Inhalt
morgen natuerlich eins weiter
.................................................
GET RLP_CAUSER_0128_20130715.csv

*TRISTEMENT* : Muss ich hier was machen oder geht das dann von alleine ?

.................................................

(datei 6) DatenHolen.ftp wird in t1.bat erstellt

*TRISTEMENT* :Hier die selbe frage ? Geht das von alleine oder muss ich etwas tun?

---

laeuft sowohl unter WinXP, alsauch Windows7

sicherlich liesse sich das ganze noch mit pipes weiter vereinfachen

regards, uli


Immer wieder sehe ich meine DatenHolen.ftp muss ich diese doch wieder anlegen und wenn ja was muss da rein?
Vorallem wenn das stück mal fertig ist über welche Bat Datei wird das ganze denn gestartet ?

Sry für die für euch eventuellen dummen fragen aber ich bin wie erwähnt noch neuling in Batch und bedanke mich schon mal für die tolle hilfe hier bei euch
Bitte warten ..
Mitglied: Invisan
17.07.2013, aktualisiert um 10:08 Uhr
Hi Tristement,

hier mal meine Version inklusive ftp Datenteil etc.

Einfach alles in eine Bat kopieren Pfad unten abändern und mal testen da ich hier keine FTP Freigabe zum testen habe.



01.
::FTP Downloader 
02.
::by Invisan 2013 
03.
 
04.
@echo off &setlocal 
05.
::Hier wird das Jahr rausgefiltert 
06.
for /f "tokens=3 delims=. " %%c in ('date /t') do ( 
07.
setlocal enabledelayedexpansion 
08.
  set "jahr=%%c" 
09.
10.
::Hier wird der Monat ausgefiltert 
11.
for /f "tokens=2 delims=." %%b in ('date /t') do ( 
12.
setlocal enabledelayedexpansion 
13.
  set "monat=%%b" 
14.
15.
::Hier wird der Tag ausgefiltert 
16.
for /f "tokens=1 delims=." %%a in ('date /t') do ( 
17.
setlocal enabledelayedexpansion 
18.
  set "tag=%%a" 
19.
  ::Wenn der erste erreicht ist beginnt der test welcher Tag der vorherige war. 
20.
  if !tag! ==01 goto :checkmonth 
21.
  ::Wenn der nicht der erste ist gehe weiter nach day 
22.
  if !tag! NEQ 01 goto :day 
23.
   
24.
  ::Teste welcher Monat ist um den Tag zuzuweisen 
25.
  :checkmonth 
26.
  if !monat! ==01 goto :jan 
27.
  if !monat! ==02 goto :feb 
28.
  if !monat! ==03 goto :mar 
29.
  if !monat! ==04 goto :apr 
30.
  if !monat! ==05 goto :mai 
31.
  if !monat! ==06 goto :jun 
32.
  if !monat! ==07 goto :jul 
33.
  if !monat! ==08 goto :aug 
34.
  if !monat! ==09 goto :sep 
35.
  if !monat! ==10 goto :okt 
36.
  if !monat! ==11 goto :nov 
37.
  if !monat! ==12 goto :dez 
38.
	 
39.
	 
40.
	:jan 
41.
				set /a jahr=!jahr!-1 
42.
				set monat=12 
43.
				set tag=31 
44.
				goto end 
45.
			     
46.
	 
47.
	:feb 
48.
				set monat=01 
49.
				set tag=31 
50.
				goto end 
51.
	 
52.
				 
53.
	:mar 
54.
				::Da der Februar im Schaltjahr 29 Tage hat setze Jahr -2000 damit die Berechnung nicht so lange dauert. 
55.
				set /a s=!jahr!-2000 
56.
				goto check 
57.
 
58.
	:check 
59.
				::Wenn s größer als 4 (ab 2005) gehe zu Minus 
60.
				::Wenn s kleiner als 4 gehe zu keinschaltjahr 
61.
				::Wenn s gleich 4 gehe zu schaltjahr 
62.
				if !s! GTR 4 goto :minus 
63.
				if !s! LSS 4 goto :keinschaltjahr 
64.
				if !s! == 4 goto :schaltjahr 
65.
 
66.
	:minus 
67.
				::Da s noch größer als 4 ist Rechne s-4 und gehe zurück zu check bis s kleiner oder gleich 4 
68.
				set /a s=!s!-4 
69.
				goto check 
70.
 
71.
		 
72.
	:keinschaltjahr		 
73.
				::S ist kleiner als 4 daher ist das Jahr kein Schaltjahr 
74.
				set monat=02 
75.
				set tag=28 
76.
				goto end 
77.
 
78.
			 
79.
	:schaltjahr 
80.
				::S ist gleich 4 daher ist das Jahr ein Schaltjahr 
81.
				set monat=02 
82.
				set tag=29 
83.
				goto end 
84.
	 
85.
	:apr 
86.
				set monat=03 
87.
				set tag=31 
88.
				goto end 
89.
 
90.
	:mai 
91.
				set monat=04 
92.
				set tag=30 
93.
				goto end 
94.
 
95.
	:jun 
96.
				set monat=05 
97.
				set tag=31 
98.
				goto end 
99.
				 
100.
	:jul 
101.
				set monat=06 
102.
				set tag=30 
103.
				goto end 
104.
				 
105.
	:aug 
106.
				set monat=07 
107.
				set tag=31 
108.
				goto end 
109.
				 
110.
	:sep 
111.
				set monat=08 
112.
				set tag=31 
113.
				goto end 
114.
				 
115.
	:okt 
116.
				set monat=09 
117.
				set tag=30 
118.
				goto end 
119.
				 
120.
	:nov 
121.
				set monat=10 
122.
				set tag=31 
123.
				goto end 
124.
				 
125.
	:dez 
126.
				set monat=11 
127.
				set tag=30 
128.
				goto end 
129.
				 
130.
	:day 
131.
				set /a tag=!tag!-1 
132.
				goto end 
133.
134.
 
135.
:end 
136.
 
137.
::Hier werden die benötigten FTP Daten in die Datei D:\copyit.ftp geschrieben 
138.
echo open ftp.*.de >>D:\copyit.ftp 
139.
echo USERNAME >>D:\copyit.ftp 
140.
echo PASSWORD >>D:\copyit.ftp 
141.
echo cd UNTERORTNERVERZEICHNISS >>D:\copyit.ftp 
142.
 
143.
::Hier werden die Variablen von oben genutzt um Jahr Monat und Tag in den Dateinamen einzufügen. 
144.
echo GET RLP_CAUSER_0128_!jahr!!monat!!tag!.csv >>D:\copyit.ftp 
145.
 
146.
echo LCD "Z:\Neuer Ordner\test\test3\Download" >>D:\copyit.ftp 
147.
 
148.
echo disconnect >>D:\copyit.ftp 
149.
 
150.
echo bye >>D:\copyit.ftp 
151.
 
152.
::Hier erfolgt jetzt der Aufruf des FTP Commands 
153.
ftp -s D:\copyit.ftp

Falls du noch Fragen dazu hast frag ruhig.


Mit freundlichen Grüßen,

Invisan


P.S.: Bevor du testest lösch die Kommentare aus dem Script damit scheint er nicht klar zu kommen.
Bitte warten ..
Mitglied: u60u60
17.07.2013 um 12:28 Uhr
Zitat von Tristement:
Hallo u60u60

Da deine Anleitung an und für sich bisher für mich am verständlichsten war habe ich die mal versucht diese zu
nehmen, jedoch scheitert es noch an einiges stellen bei mir ! Ich schreibe mal unter den Zeilen die du verfasst hast wie und wo es
noch bei mir a bissel hängt , da ich leider bisher mit Bat keine erfahrungen habe und mir halt nur alles aus dem netz
zusammen suche bitte ich um ein wenig verständniss


> Zitat von u60u60:
> ----
> Lass dich von der yesterday.bat nicht irritieren ... downloade die komplett und leg die in ein Arbeitsverzeichnis, zusammen
mit
> dem Rest:
>
> Hier erst mal der grobe Ueberblick ueber den Ablauf:
>
> schritt 1.
> ausfuehren von YESTERDAY.BAT von Endoro
> echo dateiname-part1%Yesterday%dateiname-part2 > ausgabe-von-yesterday-bat

*TRISTEMENT* : hier hänge ich schon fest , wo genau kommt der befehl rein?
>

Das ist nur erst einmal zur Erklaerung, was der Reihe nach passieren soll
Hier ist noch keine Zuordnung zu irgendwelchen Batches / Dateien beschrieben
Also erstmal nur alles graue Theorie, was der Reihe nach passieren soll, damit ein Schuh draus wird ...

Prinzipiell sollen die 2 Zeilen nur die vorbereitenden Schritte bedeuten, bevor du mit irgendeinem FTP Download in irgendeiner Batch starten kannst.

Das Script soll zum Schluss einfach die von Endoro vorgestellte Batch (die also einmal komplett downloaden) aufrufen.

Die Batch YESTERDAY.BAT ist dazu weder zu veraendern, noch sonst irgendwie zu modifizieren. Bleibt also als Standalone Batch im Orginalzustand erhalten. Wird nur durch eine Haupt-Batch, die ich hier erst einmal theoretisch vorstelle, einmalig aufgerufen, um den Datumswert von GESTERN zu ermitteln, der nach Aufruf von YESTERDAY.BAT in einer Umgebungsvariablen zu finden ist.


Die zweite Zeile generiert ein Stueck des Code Schnipsels den du fuer das jeweils aktuelle FTP Download Script benoetigst und genau nur die "veraenderliche" Zeile deines urspruenglichen FTP Download Script Datei enthaelt.
Dieses wird eben in eine temporaere Datei hineingeschrieben.
Diese Datei wird im naechsten Schritt dann wieder benoetigt ...


> schritt 2.
>
> ftp-anweisungs-file aktuell aus 3 Einzelteilen zusammenbasteln
> copy ftp-part1 + ausgabe-von-yesterday-bat + ftp-part2 DatenHolen.ftp

*TRISTEMENT* : ich habe wirklich keine ahnung was das hier zu bedeuten hat

Wir basteln uns eine neue FTP Download Script Datei zusammen, die wir spaeter beim FTP Download Aufruf benoetigen werden.

Diese FTP Download Script Datei wird dabei aus mehreren Schnipseln jeweils neu zusammengefuegt.

Dazu habe ich von deiner ersten Anzeige genau diese Datei in 3 Stuecke zerteilt.
Part1 ... das was _vor_ dem "veraenderlichen" Teil alles steht
Part2 ... der "veraenderliche" Teil, der bei jedem Aufruf der Gesamtbatch neu
erzeugt wird, was genau in Schritt 1 - Zeile 2 passierte -und-
Part3 ... was in deinem orginalen FTP Script noch hintendran kam

Diese 3 (Daten) Dateischnipsel kopieren wir mit einer Befehlszeile zusammen, die dann das fertige, jeweils neu zu benutzende FTP Script darstellen, was wir fuer den FTP Download Aufruf benoetigen.

Dieses FTP Download Script enthaelt ja den variablen Dateinamen, der per ftp herunter geladen werden soll. Also muss dieses FTP Download Script jedesmal aktuell neu zusammengebaut werden.
Und genau das macht Schritt 2 hier ...



>
> schritt 3.
> weiter mit deinem ftp download
>
> Wichtig bei der yesterday.bat ist, das am Schluss 3 Variablen in weiteren Batches weiter verwendet werden koennen

*TRISTEMENT* :nun kommt wirklich nur noch Bahnhof bei mir an

jetzt kommt dein, in deiner Aufgabenstellung aufgezeigte Aufruf fuer deinen FTP Download der mit jedem Tag mit einem anderen Namen erfolgen soll ...

der FTP Aufruf selbst setzt sich aus 2 Teilen zusammen

FTP -s:

und hintendran gehaengt ein Dateiname, der die Anweisungen fuer das FTP Programm enthaelt. Die Anweisungen fuer das FTP Programm haben wir in den ganzen Schritten zuvor jeweils neu zusammengebastelt und in die Datei - du hattest die in deiner Aufgabenstellung als "DatenHolen.ftp" bezeichnet - hineinkopiert/weggeschrieben



Ok ... nach der ganzen Theorie kommt jetzt die Praxis:




>
> Ich habe 4 (nach Aufruf 6) Dateien vorliegen:
> -----------------------------------------------------------------------------
> (datei 1)
> von http://www.robvanderwoude.com/datetiment.php#Download
> die datei yesterday.bat (komplett!) downloaden

*TRISTEMENT* :Habe ich gemacht und diese als Yesterday.bat abgespeichert

fein ... die bleibt so unveraendert


die nachfolgende Datei wird die HAUPT-Batch, mit der du jeden Tag den FTP Download anstoesst ...

>
> (datei 2) t1.bat
> ................................................
> call yesterday.bat
>
> REM --- benutze die Environment Variable Yesterday
> REM --- vom Output aus yesterday.bat
> REM --- und schreibe die neue kommandozeile fuer ftp aufruf in ydout.dat
> echo GET RLP_CAUSER_0128_%Yesterday%.csv >ydout.dat
>
> copy ftp1dat.txt + ydout.dat + ftp1dat.txt DatenHolen.ftp

---

> REM --- hier kann dein weiterer FTP aufruf stehen ...
> REM ftp -s:DatenHolen.ftp
> REM Exit

*TRISTEMENT* :t1.bat wurde erstellt und mit dem Code von dir versehen, aber was bedeutet die Zeile hier kann dein Weiterer FTP
aufruf stehen? Muss ich etwas von mir rein oder nicht?

bis zu dem Zwischenteil (nach dem COPY ....)
kannst du erst einmal versuchen die Datei aufzurufen, um zu testen, ob die Datei DATENHOLEN.FTP jeweils das von dir gewuenschte Ergebnis enthaelt.
Den Aufruf der Datei, die im Namen das Datum von Gestern enthaelt ...

Wenn das funktioniert, kannst du bei den letzten beiden Zeilen
> REM ftp -s:DatenHolen.ftp
> REM Exit
jeweils das REM (REM steht fuer Remark - Beschreibung) und hat hier erst einmal die Funktion, das der FTP Aufruf und das Exit noch nicht ausgefuehrt werden.
Nach dem Testen muessten dann die Zeilen dann wie folgt aussehen:

REM
ftp -s:DatenHolen.ftp
REM
Exit

Das hab ich bei mir zum Testen so gemacht, das nicht jedesmal tatsaechlich ein FTP Download startet, das ich erst einmal sehe, ob die Zeilen vorher alle funktionieren ...



> ................................................
>
> (datei 3) ftp1dat.txt (1. Haelfte deiner FTP Anweisungen)
> ................................................
> open ftp..de <== ist das hier richtig mit 2 Punkten?!?
> USERNAME
> PASSWORD
> cd UNTERORTNERVERZEICHNISS

*TRISTEMENT* :Nein, die 2 Punkte sind nicht richtig da stehen normalerweise Sternchen drinne, hätte auch XXXX machen
können aber die wurden hier scheinbar nicht angezteigt, ftp1dat.txt wurde auch erstellt samt FTP aufruf wie von dir
beschrieben (mit meinen Zugansdaten)

ok soweit



> ................................................
>
> (datei 4) ftp2dat.txt (letzte Haelfte deiner FTP Anweisungen)
> ................................................
> LCD Z:\Neuer Ordner\test\test3\Download
>
> disconnect
>
> bye

*TRISTEMENT* :auch die ftp2dat.exe habe ich samt inhalt erstellt

nicht ftp2dat.EXE sondern ftp2dat.TXT
EXE ist fuer Windows ein ausfuehrbarer Code ...
hier wollen wir aber erst nur Datenschnipsel ablegen. Deswegen Dateiendung .TXT



> ................................................
>
> (datei 5) wird in t1.bat erstellt und hat nach Ausfuehrung nachfolgenden Inhalt
> morgen natuerlich eins weiter
> .................................................
> GET RLP_CAUSER_0128_20130715.csv

*TRISTEMENT* : Muss ich hier was machen oder geht das dann von alleine ?

um diese Datei brauchst du dich nicht drum kuemmern ...
die wird durch die Batch jedesmal neu erstellt ...
Ich habe die Datei nur der Vollstaendigkeit halber hier benannt, das die nach Aufruf der T1.BAT auch in diesem Arbeitsverzeichnis zu finden ist ...



> .................................................
>
> (datei 6) DatenHolen.ftp wird in t1.bat erstellt

*TRISTEMENT* :Hier die selbe frage ? Geht das von alleine oder muss ich etwas tun?

Diese Datei wird durch die Haupt-Batch T1.BAT aus den weiter oben beschriebenen 3 Teilen jeweils neu erzeugt.
Wie zuvor die Datei schon, dient dies hier nur als zusaetzliche Information, das nach Aufruf der T1.BAT diese Datei auch im Verzeichnis zu finden ist



>
> ---
>
> laeuft sowohl unter WinXP, alsauch Windows7
>
> sicherlich liesse sich das ganze noch mit pipes weiter vereinfachen
>
> regards, uli


Immer wieder sehe ich meine DatenHolen.ftp muss ich diese doch wieder anlegen und wenn ja was muss da rein?

Ja, die DatenHolen.Ftp ist eine "wichtige" Datei
da die ja den Zugang zum FTP Server realisiert
Nein, du musst diese Datei nicht selbst erstellen.
Das erledigt schon die Batch T1.BAT - und zwar bei jedem Aufruf wird die Datei DatenHolen.Ftp neu erstellt


Vorallem wenn das stück mal fertig ist über welche Bat Datei wird das ganze denn gestartet ?

T1.BAT

du kannst diese HAUPT-Batch auch umbenennen in START.bat oder
MeinFtpDownload.bat oder was auch immer fuer einen Namen ...
T1.bat hatte ich die nur erst einmal in meinem eigenen Testlauf genannt



Sry für die für euch eventuellen dummen fragen aber ich bin wie erwähnt noch neuling in Batch und bedanke mich

du brauchst dich nicht zu entschuldigen ... ich habe auch mal irgendwann damit angefangen ... allerdings liegt das schon Jahre zurueck ...
Vielleicht kennst du ja den Spruch "Es ist noch kein Meister vom Himmel gefallen", aber das spricht es zutreffend aus ,-)

schon mal für die tolle hilfe hier bei euch

gern geschehen, keine Ursache ...


regards, uli
Bitte warten ..
Mitglied: Tristement
18.07.2013 um 10:09 Uhr
So, ich hab nun mal beide Varianten getestet , die von u60u60 und Invisan!

Die von Invisan bekomm ich bisher noch nicht zum Laufen habs aber auch nur kurz getestet da wenig zeit war, wo genau der fehler liegt weiß ich noch net genau , sofern a bissel mehr zeit ist schau ich da mal nach.

Die von U60u60 rennt so weit , es hängt sich iwo in der mitte noch auf da das cmd fenster stehen bleibt und nen fehler schmeißt und nur schwer zu schließen ist, aber es hat zumindest die datei heruntergeladen

Nun ist mir heute Nacht aber noch nen Problem eingefallen

Die Batch Datei holt mir ja immer nur die Datei vom Vortag ! Soll ja auch so sein , aber was mache ich nun am Montag ? Da der PC am Samsatg nicht Läuft würde mir ja die Datei vom Freitag fehlen und am Montag würde er nix herunterladen da ja Sontags keine Datein erstellt wurden.
Bitte warten ..
Mitglied: Invisan
18.07.2013 um 10:19 Uhr
Zitat von Tristement:
So, ich hab nun mal beide Varianten getestet , die von u60u60 und Invisan!

Die von Invisan bekomm ich bisher noch nicht zum Laufen habs aber auch nur kurz getestet da wenig zeit war, wo genau der fehler
liegt weiß ich noch net genau , sofern a bissel mehr zeit ist schau ich da mal nach.

Die von U60u60 rennt so weit , es hängt sich iwo in der mitte noch auf da das cmd fenster stehen bleibt und nen fehler
schmeißt und nur schwer zu schließen ist, aber es hat zumindest die datei heruntergeladen

Nun ist mir heute Nacht aber noch nen Problem eingefallen

Die Batch Datei holt mir ja immer nur die Datei vom Vortag ! Soll ja auch so sein , aber was mache ich nun am Montag ? Da der PC
am Samsatg nicht Läuft würde mir ja die Datei vom Freitag fehlen und am Montag würde er nix herunterladen da ja
Sontags keine Datein erstellt wurden.


Hallo Tristement.

Wie in meinem Beitrag schon geschrieben musst du die ganzen Kommentare rauslöschen sprich alles was mit :: beginnt danach sollte mein Skript Problemlos laufen.
Bitte warten ..
Mitglied: Invisan
18.07.2013, aktualisiert um 14:21 Uhr
Hier jetzt nochmal die optimierte Version die am Montag auf Freitag springt (sozusagen)

EDIT: Nochmal ne neue verkürzte Version.


01.
@echo off &setlocal 
02.
for /f "tokens=3 delims=. " %%c in ('date /t') do ( 
03.
setlocal enabledelayedexpansion 
04.
  set "jahr=%%c" 
05.
06.
for /f "tokens=2 delims=." %%b in ('date /t') do ( 
07.
setlocal enabledelayedexpansion 
08.
  set "monat=%%b" 
09.
10.
for /f %%g in ('wmic path win32_localtime get dayofweek^|findstr /v /r "^$"') do ( 
11.
setlocal enabledelayedexpansion 
12.
	set DOW=%%g 
13.
14.
for /f "tokens=1 delims=." %%a in ('date /t') do ( 
15.
setlocal enabledelayedexpansion 
16.
				set "tag=%%a" 
17.
				set test=2 
18.
   
19.
				if !DOW! GTR 1 goto :welcome 
20.
				if !DOW!==1 goto :one 
21.
				 
22.
	:one  
23.
				set /a test=!test!-1 
24.
				if !tag!==01 goto :checkmonth 
25.
				set /a tag=!tag!-1 
26.
				if !test! GTR 0 goto :one 
27.
   
28.
   
29.
	:welcome 
30.
				if !tag! ==01 goto :checkmonth 
31.
				if !tag! NEQ 01 goto :day 
32.
   
33.
	:checkmonth 
34.
				echo check 
35.
				if !monat! ==01 goto :eins 
36.
				if !monat! ==02 goto :zwei 
37.
				if !monat! ==03 goto :mar 
38.
				if !monat! ==04 goto :zwei 
39.
				if !monat! ==05 goto :drei 
40.
				if !monat! ==06 goto :zwei 
41.
				if !monat! ==07 goto :drei 
42.
				if !monat! ==08 goto :zwei 
43.
				if !monat! ==09 goto :zwei 
44.
				if !monat! ==10 goto :drei 
45.
				if !monat! ==11 goto :zwei 
46.
				if !monat! ==12 goto :drei 
47.
	 
48.
	 
49.
	:eins 
50.
				set /a jahr=!jahr!-1 
51.
				set monat=12 
52.
				set tag=31 
53.
				if !test! GTR 0 goto :one 
54.
				goto end 
55.
			     
56.
	 
57.
	:zwei 
58.
				set /a monat=!monat!-1 
59.
				set tag=31 
60.
				if !test! GTR 0 goto :one 
61.
				goto end 
62.
				 
63.
	:drei		 
64.
				set /a monat=!monat!-1 
65.
				set tag=30 
66.
				if !test! GTR 0 goto :one 
67.
				goto end 
68.
				 
69.
	:mar 
70.
				set /a s=!jahr!-2000 
71.
				goto check 
72.
 
73.
	:check 
74.
				if !s! GTR 4 goto :minus 
75.
				if !s! LSS 4 goto :keinschaltjahr 
76.
				if !s! == 4 goto :schaltjahr 
77.
 
78.
	:minus 
79.
				set /a s=!s!-4 
80.
				goto check 
81.
 
82.
		 
83.
	:keinschaltjahr		 
84.
				set monat=02 
85.
				set tag=28 
86.
				if !test! GTR 0 goto :one 
87.
				goto end 
88.
 
89.
			 
90.
	:schaltjahr 
91.
				set monat=02 
92.
				set tag=29 
93.
				if !test! GTR 0 goto :one 
94.
				goto end 
95.
				 
96.
	:day 
97.
				set /a tag=!tag!-1 
98.
				goto end 
99.
				 
100.
			 
101.
102.
 
103.
:end 
104.
 
105.
 
106.
 
107.
echo open ftp.*.de >>D:\copyit.ftp 
108.
echo USERNAME >>D:\copyit.ftp 
109.
echo PASSWORD >>D:\copyit.ftp 
110.
echo cd UNTERORTNERVERZEICHNISS >>D:\copyit.ftp 
111.
 
112.
echo GET RLP_CAUSER_0128_!jahr!!monat!!tag!.csv >>D:\copyit.ftp 
113.
 
114.
echo LCD "Z:\Neuer Ordner\test\test3\Download" >>D:\copyit.ftp 
115.
 
116.
echo disconnect >>D:\copyit.ftp 
117.
 
118.
echo bye >>D:\copyit.ftp 
119.
 
120.
ftp -s copy.ftp
Bitte warten ..
Mitglied: bastla
18.07.2013 um 12:55 Uhr
Hallo @ All!

Da das hier dem Ende zugeht, vielleicht doch noch eine Alternativvariante zur Berechnung des Datums von gestern (bzw des Freitags davor, falls das Ergebnis ein Sonntag wäre):
01.
set "Script=%temp%\GesternSpezial.vbs" 
02.
>"%Script%" echo T=DateAdd("d",-1,Date):If Weekday(T)=1 Then:T=DateAdd("d",-2,T):End If:WScript.Echo T 
03.
for /f "tokens=1-3 delims=." %%a in ('cscript //nologo "%Script%"') do ( 
04.
    set "tag=%%a" 
05.
    set "monat=%%b" 
06.
    set "jahr=%%c" 
07.
08.
del "%Script%"
Grüße
bastla
Bitte warten ..
Mitglied: 76109
18.07.2013, aktualisiert um 14:56 Uhr
Hallo @All!

Oder das Ganze gleich mit einem Script erledigen (*.vbs):
01.
'Ftp-Daten entsprechend anpassen***************************************** 
02.
 Const Z1 = "ftp.*.de" 
03.
 Const Z2 = "Username" 
04.
 Const Z3 = "Passwort" 
05.
 Const Z4 = "CD Unterverzeichnis" 
06.
 Const Z5 = "GET RLP_CAUSER_0128_%Date%.csv"  '%Date% wird vom Code ersetzt 
07.
 Const Z6 = "LCD Z:\Test\Download" 
08.
 Const Z7 = "Disconnect" 
09.
 Const Z8 = "Bye" 
10.
'Ftp-Daten************************************************************** 
11.
 
12.
'Wird im Script-Verzeichnis erstellt/überschrieben 
13.
 Const sFtpFileName = "CsvDatenDownload.ftp" 
14.
 
15.
'Ftp-Datei wird angefügt 
16.
 Const sFtpCmdLine = "ftp -s:" 
17.
 
18.
 Set oShell = CreateObject("WScript.Shell") 
19.
 Set oFso = CreateObject("Scripting.FileSystemObject") 
20.
 
21.
 'Aktuelles Datum -1 
22.
 dDate = Date - 1 
23.
 
24.
 'Wenn Datum vom Montag, dann Datum vom Freitag 
25.
 If Weekday(dDate) = vbSunday Then 
26.
    dDate = dDate - 2 
27.
 End If 
28.
 
29.
'DateFormat YYYYMMDD 
30.
 sDate = Year(dDate) & Right("0" & Month(dDate), 2) & Right("0" & Day(dDate), 2) 
31.
 
32.
'Date in Dateinamen einfügen 
33.
 sZ5 = Replace(Z5, "%Date%", sDate) 
34.
 
35.
'Ftp-Text erzeugen 
36.
 sFtpText = Join(Array(Z1, Z2, Z3, Z4, sZ5, Z6, Z7, Z8), vbNewLine) 
37.
 
38.
'Ftp-Dateinamen erzeugen 
39.
 sFile = oFso.GetParentFolderName(Wscript.ScriptFullName) & "\" & sFtpFileName 
40.
 
41.
'Ftp-Datei schreiben 
42.
 oFso.CreateTextFile(sFile).Write sFtpText 
43.
 
44.
'Ftp-CommandLine erzeugen 
45.
 sCmdLine = sFtpCmdLine & Chr(34) & sFile & Chr(34) 
46.
 
47.
'Pause 200 Millisekunden 
48.
 Wscript.Sleep 200 
49.
 
50.
'Datei downloaden 
51.
'oShell.Run sCmdLine, 0, False
Nachdem Du die Daten von Zeile 2-9 angepasst hast, startest Du das Script und schaust Dir zur Kontrolle die "CsvDatenDownload.ftp"-Datei im Script-Verzeichnis an und korrigierst gegebenenfalls die Codezeilen 2-9.

Wenn soweit alles korrekt ist, dann entfernst Du in der letzten Codezeile im Script das Kommentarzeichen (') vor "oShell.Run sCmdLine, 0, False" und startest das Script erneut. Im Idealfall sollte dann der Download der Csv-Datei erfolgen.

Gruß Dieter
Bitte warten ..
Mitglied: Invisan
18.07.2013 um 13:32 Uhr
Zitat von 76109:
Hallo @All!

Oder das Ganze gleich mit einem Script erledigen (*.vbs):
01.
> 'Ftp-Daten entsprechend anpassen***************************************** 
02.
>  Const Z1 = "ftp.*.de" 
03.
>  Const Z2 = "Username" 
04.
>  Const Z3 = "Passwort" 
05.
>  Const Z4 = "CD Unterverzeichnis" 
06.
>  Const Z5 = "GET RLP_CAUSER_0128_%Date%.csv"  '%Date% wird vom Code ersetzt 
07.
>  Const Z6 = "LCD Z:\Test\Download" 
08.
>  Const Z7 = "Disconnect" 
09.
>  Const Z8 = "Bye" 
10.
> 'Ftp-Daten************************************************************** 
11.
>  
12.
> 'Wird im Script-Verzeichnis erstellt/überschrieben 
13.
>  Const sFtpFileName = "CsvDatenDownload.ftp" 
14.
>  
15.
> 'Ftp-Datei wird angefügt 
16.
>  Const sFtpCmdLine = "ftp -s:" 
17.
>  
18.
>  Set oShell = CreateObject("WScript.Shell") 
19.
>  Set oFso = CreateObject("Scripting.FileSystemObject") 
20.
>  
21.
>  'Aktuelles Datum -1 
22.
>  dDate = Date - 1 
23.
>  
24.
>  'Wenn Datum vom Montag, dann Datum vom Freitag 
25.
>  If Weekday(dDate) = vbMonday Then 
26.
>     dDate = dDate - 2 
27.
>  End If 
28.
>  
29.
> 'DateFormat YYYYMMDD 
30.
>  sDate = Year(dDate) & Right("0" & Month(dDate), 2) & Right("0" & Day(dDate), 2) 
31.
>  
32.
> 'Date in Dateinamen einfügen 
33.
>  sZ5 = Replace(Z5, "%Date%", sDate) 
34.
>  
35.
> 'Ftp-Text erzeugen 
36.
>  sFtpText = Join(Array(Z1, Z2, Z3, Z4, sZ5, Z6, Z7, Z8), vbNewLine) 
37.
>  
38.
> 'Ftp-Dateinamen erzeugen 
39.
>  sFile = oFso.GetParentFolderName(Wscript.ScriptFullName) & "\" & sFtpFileName 
40.
>  
41.
> 'Ftp-Datei schreiben 
42.
>  oFso.CreateTextFile(sFile).Write sFtpText 
43.
>  
44.
> 'Ftp-CommandLine erzeugen 
45.
>  sCmdLine = sFtpCmdLine & Chr(34) & sFile & Chr(34) 
46.
>  
47.
> 'Pause 200 Millisekunden 
48.
>  Wscript.Sleep 200 
49.
>  
50.
> 'Datei downloaden 
51.
> 'oShell.Run sCmdLine, 0, False 
52.
> 
Nachdem Du die Daten von Zeile 2-9 angepasst hast, startest Du das Script und schaust Dir zur Kontrolle die
"CsvDatenDownload.ftp"-Datei im Script-Verzeichnis an und korrigierst gegebenenfalls die Codezeilen 2-9.

Wenn soweit alles korrekt ist, dann entfernst Du in der letzten Codezeile im Script das Kommentarzeichen (') vor
"oShell.Run sCmdLine, 0, False" und startest das Script erneut. Im Idealfall sollte dann der Download der Csv-Datei
erfolgen.

Gruß Dieter


Hallo Dieter,

ist doch bei meiner Variante auch mit einem einzigen Skript abgedeckt nur halt kein VBS sondern Plain Batch ;)

Mit freundlichen Grüßen Invi
Bitte warten ..
Mitglied: 76109
18.07.2013, aktualisiert um 14:07 Uhr
Hallo Invisan!

Sorry, hatte ich doch glatt übersehen und Du hast Dir ja reichlich Mühe gegeben

Kein Wunder bei diesen riesen Kommentaren verliert man leicht den Überblick...

Gruß Dieter
Bitte warten ..
Mitglied: Invisan
18.07.2013 um 14:23 Uhr
Zitat von 76109:
Hallo Invisan!

Sorry, hatte ich doch glatt übersehen und Du hast Dir ja reichlich Mühe gegeben

Kein Wunder bei diesen riesen Kommentaren verliert man leicht den Überblick...

Gruß Dieter


Stimmt was das Überblick verlieren angeht hast du recht

Hab das ganze jetzt nochmal umgeschrieben und auf 120 Zeilen verkürzt.

Selbst schuld wenn man so dämlich is und jedesmal wieder Monat und Tag explizit für den Monat angibt anstatt das automatisch zu berechnen
"

Mit freundlichen Grüßen Invi
Bitte warten ..
Mitglied: u60u60
18.07.2013 um 14:38 Uhr
Aufhaengen ... ich habe 3 Vermutungen ...
die eine sind die Registry Zugriffe (Auslesen der Localised Datums Umgebung)
die #2 ist das ftp script selber das noch haengt und noch nicht abgeschlossen ist
die #3 Aufruf der Batch + Aufruf des FTP scripts mit Exit beendet noch nichts zwangslaeufig die Batch ?!?

Wie dem auch sei ... mit dem "Montag" Problem ist die vormalige Loesung alleine nur bedingt laeuffaehig ... da bedarf es weiterer Scripte von http://www.robvanderwoude.com/datetiment.php#Download
Um das Problem mit der T1.BAT zu loesen werden weitere Scripte benoetigt:
datepart.bat um den Wochentag zu bestimmen
dateadd.bat um am Montag 3 Tage zurueckzurechnen heute minus 3 tage
datefmt.bat die downloadbare vom obigen Link liefert nur das Format vom heutigen Tag ... dazu bedarf es einer Anpassung dieser Batch um auch ein Customized Datum zu uebergeben und umzuwandeln

Ok: http://www.robvanderwoude.com/files/datefmt_nt.txt abspeichern als datefmt.bat

Davon erstelle bitte eine Kopie nach datefmt2.bat

Nun datefmt2.bat editieren:
Zeile 4
IF NOT "%~6"=="" GOTO Syntax
ersetzen gegen
IF NOT "%~7"=="" GOTO Syntax
Zeile 11
FOR /F "tokens=1-3 delims=(/-)" %%B IN ("!DateFmt!") DO (
ersetzen gegen
FOR /F "tokens=1-3 delims=(./-)" %%B IN ("!DateFmt!") DO (
Zeile 21 einfuegen:
REM using customized date as last parameter
REM /LZ maybe on pos 4 or pos5
IF /I "%~5"=="/LZ" (SET Today=%6)
IF /I "%~4"=="/LZ" (SET Today=%5)
IF /I "!Today!"=="" (SET Today=!%%A!)

Zeile 73 (+/- 1 oder 2 Zeilen)
ECHO Usage: DATEFMT date_format [ delimiter ] [ /LZ ]
ersetzen gegen
ECHO Usage: DATEFMT date_format [ delimiter ] [ /LZ ] [ custom_date ]
ungefaehr Zeile 83 nach
ECHO /LZ use leading zeroes in the end result
folgende Zeile einfuegen
ECHO custom_date use another date then TODAY in localized format
Am Ende der Beispiele (ungefaehr Zeile 93)
kannst du noch nachfolgendes Beispiel einfuegen
ECHO DATEFMT yy mm dd * /LZ 01/15/2007 --- 07*01*15 (January 15, 2007)
Datei speichern.


Die anderen Batches
datepart.bat
dateadd.bat
hast du dir auch schon runtergeladen und abgespeichert?
Dann ist das jetzt der passende Zeitpunkt

Die T1.BAT ist nun anzupassen.
Dazu am besten komplette T1.BAT nehmen:
call datepart.bat w
if "%DatePart%"=="1" GOTO getfriday
call yesterdy.bat
echo GET RLP_CAUSER_0128_%Yesterday%.csv >ydout.dat
copy ftp1dat.txt + ydout.dat + ftp2dat.txt DatenHolen.ftp
goto aend


:getfriday
call dateadd -3
echo Letzter Freitag war: %DATEADD%
REM bei Deutschem Windows benutze jj mm tt
REM bei Englischem Windows benutze yy mm dd
REM in der naechsten Zeile
call datefmt2 jj mm tt /LZ %DATEADD%

REM die letzte Variable hier ist DateFmt die das korrigierte Datum enthaelt
echo GET RLP_CAUSER_0128_%DateFmt%.csv >ydout.dat
copy ftp1dat.txt + ydout.dat + ftp2dat.txt DatenHolen.ftp

:aend
ftp -s:DatenHolen.ftp
EXIT
Hier noch paar Erklaerungen:
call datepart.bat w
liefert den Wochentag in Numerischer Form
1 ist Montag, 2 ist Dienstag usw.
Um das Script Heute (Donnerstag) zu testen, ob das Datum von vor 3 Tagen genommen wird, in der nachfolgenden Zeile
if "%DatePart%"=="1" GOTO getfriday
die 1 durch eine 4 (fuer Donnerstag) ersetzen ...
Dann kommt nicht das Datum von Gestern (20130717) raus, sondern
20130718 minus 3 Tage = 15. Juli -> 20130715
Fuer die Produktiv Batch wieder auf
if "%DatePart%"=="1" GOTO getfriday
setzen

call dateadd -3
zieht vom heutigen Datum 3 Tage ab
und liefert das Ergebnis in der Variablen DATEADD
Diese Variable uebergeben wir der naechsten Batch, der angepassten DATEFMT.BAT => jetzt DATEFMT2.BAT
so das der gesamte Aufruf lautet:
call datefmt2 jj mm tt /LZ %DATEADD%

Der Parameter /LZ bedeutet hier nur ... auffuellen mit fuehrenden Nullen
(Leading Zero's)

Das neu formatierte Datum nehmen wir nun, wie schon in der urspruenglichen T1.BAT, um einen Datenschnipsel fuer die FTP Script Datei zu erstellen.
Diese Zeile enthaelt nun wieder eine angepasste FTP Download Zeile mit variablem Dateinamen, der Datei die mittels FTP heruntergeladen werden soll.
Dateiname ist nun angepasst fuer den Fall das wir Montag haben, mit Datum vom letzten Freitag

regards, uli
Bitte warten ..
Mitglied: bastla
18.07.2013 um 14:43 Uhr
@ Dieter
Sollte Zeile 25 nicht eher
If Weekday(dDate) = vbSunday Then
lauten?

Grüße
bastla
Bitte warten ..
Mitglied: 76109
18.07.2013, aktualisiert um 14:57 Uhr
Hallo bastla!

Oha, stimmt Danke für den Hinweis (oben geändert)

Gruß Dieter
Bitte warten ..
Mitglied: Biber
18.07.2013, aktualisiert um 20:08 Uhr
[OT] @bastla und @76109,

...ich will jetzt nicht rumchaotisieren in diesem Thread, aber ich hab mich früher ja auch mal kurz mit Batch und Datumswerten und wie komme ich heute auf das Datum von gestern rumgebalgt.

Ich würde die ganze Strategie (falls ich eventuell auf native Batch zurückfallen muss) umbauen:

  • beim Start der Batches das Datum des letzten geglückten Laufs aus einer Datei lesen lassen mit
Set /p letzterLauf=<%temp%\LetzterLauf.txt
  • den Batch nach dem Download in eine einzeilige Textdatei mit
>%temp%\LetzterLauf.txt @echo %Date%
schreiben lassen

Dann habe ich keine Umrechnerei mit 500+x Zeilen und drei Hilfsdateien und ich brauche mir um Sonderlocken keine Gedanken machen wie den Fall "Ostern"
(Ostern geht es dreifach schief. Karfreitag wird nicht gearbeitet, deshalb bleibt die Datei von Donnerstag liegen. Montag geht es auch schief, weil a) keine Datei von Karfreitag da ist b) keiner arbeitet und Dienstag fasst er nochmal ins Leere, weil keine Datei von Ostermontag da ist).

Mit meiner Mimik oben würde an Donnerstag vor Ostern die Datei vom Vortag geholt und am nächsten Arbeitstag (Dienstag) die Datei vom vorangegangenen Donnerstag.
Ohne ein O- bzw. Ge-stern berechnen zu müssen.

Grüße
Biber
P.S. Ach ja: vor dem Eintüten des Batches in den Taskplaner ist tatsächlich einmalig nötig, diese "LetzterLauf.txt"-Datei mit dem Datum von gestern manuell zu erzeugen.
Halte ich aber für vertretbar.

P.P.S. Statt echo %date% =>, z.B "18.07.2013" geht natürlich auch
echo %date:~-4,4%%date:~-7,2%%date:~-10,2% => "20130718".
[/OT]
Bitte warten ..
Mitglied: 76109
18.07.2013 um 15:59 Uhr
Hallo Biber!

Gedanken machen wie den Fall "Ostern" (Ostern geht es dreifach schief. Karfreitag wird nicht gearbeitet, deshalb bleibt die Datei von Donnesrtag liegen. Montag geht es auch schief, weil a) keine Datei von Karfreitag da ist b) keiner arbeitet und Dienstag fasst er nochmal ins Leere, weil keine Datei von Ostermontag da ist).
Da hab ich mir natürlich auch meine Gedanken drüber gemacht, aber leider nix dazu eingefallen

Mit meiner Mimik oben würde an Donnerstag vor Ostern die Datei vom Vortag geholt und am nächsten Arbeitstag (Dienstag) die Datei vom vorangegangenen Donnerstag. Ohne ein O- bzw. Gestern berechnen zu müssen.
Super Idee
Also, vor dem nächsten Download einmalig das gestrige Datum speichern und dann immer:
Datum auslesen, downloaden, aktuelles Datum speichern...

Das ich da nicht draufgekommen bin...

Gruß Dieter
Bitte warten ..
Mitglied: u60u60
18.07.2013 um 16:09 Uhr
Zitat von 76109:

> Mit meiner Mimik oben würde an Donnerstag vor Ostern die Datei vom Vortag geholt und am nächsten Arbeitstag
(Dienstag) die Datei vom vorangegangenen Donnerstag. Ohne ein O- bzw. Gestern berechnen zu müssen.
Super Idee

Das ich da nicht draufgekommen bin...

da biste nich alleine :D

Gruß Dieter

regards, uli
Bitte warten ..
Mitglied: bastla
18.07.2013 um 18:30 Uhr
@ Biber
Wer kann, der kann.

Grüße
bastla
Bitte warten ..
Mitglied: Tristement
01.08.2013 um 19:19 Uhr
Zitat von Biber:
[OT] @bastla und @76109,

...ich will jetzt nicht rumchaotisieren in diesem Thread, aber ich hab mich früher ja auch mal kurz mit Batch und
Datumswerten und wie komme ich heute auf das Datum von gestern rumgebalgt.

Ich würde die ganze Strategie (falls ich eventuell auf native Batch zurückfallen muss) umbauen:

  • beim Start der Batches das Datum des letzten geglückten Laufs aus einer Datei lesen lassen mit
Set /p letzterLauf=<%temp%\LetzterLauf.txt
  • den Batch nach dem Download in eine einzeilige Textdatei mit
>%temp%\LetzterLauf.txt @echo %Date%
schreiben lassen

Dann habe ich keine Umrechnerei mit 500+x Zeilen und drei Hilfsdateien und ich brauche mir um Sonderlocken keine Gedanken machen
wie den Fall "Ostern"
(Ostern geht es dreifach schief. Karfreitag wird nicht gearbeitet, deshalb bleibt die Datei von Donnerstag liegen. Montag geht es
auch schief, weil a) keine Datei von Karfreitag da ist b) keiner arbeitet und Dienstag fasst er nochmal ins Leere, weil keine
Datei von Ostermontag da ist).

Mit meiner Mimik oben würde an Donnerstag vor Ostern die Datei vom Vortag geholt und am nächsten Arbeitstag (Dienstag)
die Datei vom vorangegangenen Donnerstag.
Ohne ein O- bzw. Ge-stern berechnen zu müssen.

Grüße
Biber
P.S. Ach ja: vor dem Eintüten des Batches in den Taskplaner ist tatsächlich einmalig nötig, diese
"LetzterLauf.txt"-Datei mit dem Datum von gestern manuell zu erzeugen.
Halte ich aber für vertretbar.

P.P.S. Statt echo %date% =>, z.B "18.07.2013" geht natürlich auch
echo %date:~-4,4%%date:~-7,2%%date:~-10,2% => "20130718".
[/OT]

So da bin ich wieder frisch aus dem Urlaub

Ich habe nun etliche mahle versucht etwas vernünftiges zum Laufen zu bekommen aber außer die Vorschläge von u60u60 funktioniert der Rest leider nicht
Bei dem Aufbau von u60u60 wird zwar herunter geladen aber das CMD Fenster bleibt offen da iwo wohl ein doppelter Aufruf stattfindet!?
Im CMD Fenster steht mehrmals das ich mit dem Server schon verbunden bin und mich abmelden solle da ich schon verbunden bin mit dem Server.

@Biber, dein Vorschlag klingt für mich recht plausibel und vor allem sicher da gerade wie du schon erwähnst bei Feiertagen das ganze ein wenig heikel wird. Kannst du das ganze ein wenig genauer erläutern für nen Newby wie mich
Bitte warten ..
Mitglied: Biber
01.08.2013, aktualisiert um 20:28 Uhr
Moin Tristement,

na ja, was davon soll ich denn noch ausführlicher erklären....?

Ich gehe von zwei Voraussetzungen (ITler sagen eigentlich "Unterstellungen" oder "ungesicherte Annahmen" dazu) aus.

1) du brauchst diesen abgeleiteten Datumsstring "20130801" oder ähnlich nicht zum Rechnen oder Datum-Prüfen, sondern nur Teil des Dateinamens, Ist halt nur Text, der aber möglichst das Erstellungsdatum der Datei auf dem Server wiedergeben sollte,

2) Für dich und deine Kumpels mit dem Server gelten die gleichen Arbeits- & Feiertage.

Annahme 2 lässt dann folgendes schlussfolgern.
-> Heute ist Donnerstag, kein Feiertag, du hockst am Rechner -> also sitzen deine FTP-Kumpels auch am Rechner
-> für heute erzeugte Dateien auf der FTP-Seite brauchst du morgen (wenn du du die Datei herunterlädst) den ANSI-Datumsstring "20130801" für den 1.August 2013, das heutige Datum
-> den kannst du heute problemlos mit Batchmitteln erzeugen
echo %date:~-4,4%%date:~-7,2%%date:~-10,2% => "20130801".
-> aber verwenden darfst du den String erst morgen, wenn du deren Datei von heute saugst.


Deshalb die Idee: schreib dieses %date%-Gestrunkele HEUTE in eine Datei, merk dir deren Namen & Pfad und verwende den Inhalt morgen in deinem Batch.

Mit dem "SET /p LetzterLauf=<D:\ein\Merkname\von\Eben\Datumsstring.txt" kannst du die erste Zeile einer Textdatei in eine Variable einlesen.

Mit dem "echo %date:~-4,4%%date:~-7,2%%date:~-10,2%>D:\ein\Merkname\von\Eben\Datumsstring.txt kannst du in diese Datei immer das aktuelle Datum schreiben und jedweden bisherigen Inhalt überschreiben.

Jetzt musst du nur noch diese Variable "LetzterLauf" in deinem Schnipsel benutzen.

Grüße
Biber

P.S. Ich hoffe, du hast deinen Urlaub genossen, während wir hier ein paar hundert Codezeilen für dich zusammengeklöppelt haben?
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst In Html-Datei per Batchdatei das Datum und die Uhrzeit eintragen (2)

Frage von Hakiegold zum Thema Batch & Shell ...

Informationsdienste
Excel Datei ohne Download zur Verfügung stellen (4)

Frage von gnaulimon zum Thema Informationsdienste ...

Windows Server
gelöst Sichtbares Ausführen einer BAT-Datei mittels GPOs (10)

Frage von DasWombat1993 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...