# Zufällige Dateinamenwahl pei FTP-Upload per Batch?



## moonlightshadow (28. April 2006)

Hi LeuZ,
Ich habe ein Problem:
Also, ich habe 2 Dateien (upload.bat, upload.ftp)
Inhalt der upload.bat:

```
ftp.exe -v -s:upload.ftp
```
Inhalt der upload.ftp:

```
open *********.de
(Benutzername)
(Passwort)
put pictures.dll %datum%-%zeit%-upload.gf
quit
```

Ich habe erst versucht die Datei mit Datum und Uhrzeit im Dateinamen hochladen zu lassen, aber das ging nicht ( 
	
	
	



```
put pictures.dll %datum%-%zeit%-upload.gf
```
)... Ich muss es aber unbedingt so hinkriegen, das das Script sich automatisch einen Zufälligen Dateinamen wählt - Denn das Script ist Teil eines Programmes, welches nach der Eingabe von einigen Daten in ein Formular dieses Formular automatisch auf den Server hochlädt. Das Problem ist nur, das alle Formulare den selben Dateinamen haben und also immer wieder überschrieben werden würden! 
Das darf aber nicht passieren weil ich alle Formulare brauche!!
Ich versuche das jetzt schon den ganzen Tag hinzukriegen und es klappt einfach nicht  ... Kann mir irgendwer von euch helfen?


----------



## Matthias Reitinger (28. April 2006)

Am besten wäre es wohl, wenn man die upload.ftp jedes mal mittels Batch neu erstellt. Dabei kann man nämlich auch auf die Umgebungsvariablen zugreifen.


----------



## moonlightshadow (29. April 2006)

Super Idee, nur leider kenne ich mich nicht so damit aus und weiß nicht, wie ich das realisieren sollte...

Ích habe soviel verstanden, das die upload.bat die upload.ftp bei jedem Upload selbst neu erstellen soll nur ich habe kp wie man das coden soll... Du vllt?
Ich muss das unbedingt haben sonst kann ich ein ganzes Projekt vergessen!

Weißt du, wie man das Coden müsste?


----------



## Matthias Reitinger (29. April 2006)

echo in Verbindung mit den Pipe-Operatoren > und >> sollten hier weiterhelfen.

Stellt man einem Befehl ein >_dateiname_ nach, so wird die Ausgabe dieses Befehls in die Datei namens _dateiname_ geschrieben. Existiert die Datei noch nicht, wird sie erstellt. Existiert sie bereits, wird ihr gesamter Inhalt verworfen.

Mit einem nachgestellten >>_dateiname_ erreicht man, dass wiederum die Ausgabe in die Datei geschrieben wird, allerdings wird der alte Inhalt nicht verworfen, sondern die neuen Daten einfach angehängt.

Somit würde sich bspw. folgende Lösung anbieten:

```
@echo off

echo open example.com> upload.ftp
echo username>> upload.ftp
echo password>> upload.ftp
echo binary>> upload.ftp
echo put pictures.dll %date%-%time%-%random%-upload.gf>> upload.ftp
echo quit>> upload.ftp

ftp.exe -v -s:upload.ftp

del upload.ftp
```


----------



## moonlightshadow (30. April 2006)

Danke!! Du bist mein Retter ;-) Mit deinem Code funktioniert es perfekt! VIELEN DANK


----------



## chrysler (1. Mai 2006)

Hallo, Matthias.

Warum hast du dem Code von moonlightshadow noch
den binary hinzugefügt? Was bedeutet binary bzw. was bewirkt er?

Die zweite Befehlszeile verstehe ich auch nicht so ganz, kannst du sie mir erklären?


```
echo binary>> upload.ftp
echo put pictures.dll %date%-%time%-%random%-upload.gf>> upload.ftp
```


----------



## Matthias Reitinger (1. Mai 2006)

Hallo,



			
				chrysler hat gesagt.:
			
		

> Warum hast du dem Code von moonlightshadow noch
> den binary hinzugefügt? Was bedeutet binary bzw. was bewirkt er?


binary aktiviert den Übertragungsmodus für Binärdaten. Damit wird sichergestellt, dass die Datei auch zwischen Systemen mit unterschiedlicher Wortlänge korrekt transferiert werden kann. 



> Die zweite Befehlszeile verstehe ich auch nicht so ganz, kannst du sie mir erklären?


Hier wird einfach die Anweisung, die Date pictures.dll hochzuladen, in die upload.ftp geschrieben. Der Dateiname auf dem Server setzt sich dabei aus einigen vorbesetzten Umgebungsvariablen zusammen:

%date% wird durch das aktuelle Datum ersetzt,
%time% durch die aktuelle Zeit und
%random% durch eine (Pseudo-)Zufallszahl

Grüße,
 Matthias


----------



## chrysler (1. Mai 2006)

Super.
Was bedeutet "Systeme mit unterschiedlicher Wortlänge" ?
Und was sind .gf Dateien?


----------



## chrysler (1. Mai 2006)

Ich habe das 
	
	
	



```
%datum%-%zeit%-Datei.txt
```
 bennenen auch probiert, es klappt aber nicht.
Mein Quelltext:

```
ECHO OFF
CLS
ECHO.
ECHO Text>>%Time%.txt
```

beim DATUM funktioniert das:

```
ECHO OFF
CLS
ECHO.
ECHO Text>>%DATE%.txt
```

Woran liegt das und wie kann ich das Beispiel von oben anwenden?


----------



## Matthias Reitinger (2. Mai 2006)

Vermutlich enthält die Umgebungsvariable %time% Zeichen, die in einem Dateinamen nicht vorkommen dürfen.


----------



## chrysler (6. Mai 2006)

Funktioniert die Pfadangabe mit der Zeit bei dem anderen User aus dem vorigen Beitrag?


----------



## Matthias Reitinger (6. Mai 2006)

Das kommt ganz darauf an, auf welchem System der FTP-Server läuft. In einer Linux-Umgebung sollten Dateinamen mit einem Doppelpunkt keine Probleme bereiten.


----------



## moonlightshadow (11. Mai 2006)

chrysler hat gesagt.:
			
		

> Funktioniert die Pfadangabe mit der Zeit bei dem anderen User aus dem vorigen Beitrag?


 ja, es funktioniert bei mir.


----------



## chrysler (11. Mai 2006)

Darf man wissen, ob du ein Linux System benutzt?
Nebenbei: läuft auf Linux nicht eine ähnliche Sprache wie batch, oder läuft dort dasselbe batch?


----------



## Matthias Reitinger (12. Mai 2006)

Bei Linux nennt sich der Kommandointerpreter „Shell“, wobei es (wie so oft) dem User überlassen ist, welche Shell-Implementation er verwendet. Recht weit verbreitet ist allerdings „Bash“ (*B*ourne *A*gain *Sh*ell) – insofern spricht man dann auch oft von Bash-Skripten. Diese stellen so in etwa das Äquivalent zu Batch-Skripten dar. Bash ist allerdings (gekoppelt mit den vielen nützlichen Kommandozeilentools einer Standardinstallation) um einiges mächtiger als Batch. Von Grundgedanken einer Stapelverarbeitung her sind sich beide aber zumindest ähnlich.


----------



## moonlightshadow (21. Mai 2006)

chrysler hat gesagt.:
			
		

> Darf man wissen, ob du ein Linux System benutzt?


Ja, ich denke schon bin mir aber nicht sicher...

Wo hast du denn deinen Webspace? Also ich jedenfalls bin bei 1&1 und ich denke die haben Linux.


----------



## Message (27. Mai 2006)

Genau das hab ich auch gesucht 
Ist es auch möglich beim FTP Upload einen Status mit einzublenden? Entweder in % oder besser in "x MB von x MB"? Wären nämlich schon recht große Dateien die ich damit hochladen würde (ca. 200 MB).

Und ist es möglich, max. x Dateien zu erlauben und wenn das Limit erschöpft ist die Älteste auf dem FTP Server zu löschen?

Und lassen sich beim Dateinamen z.B. "27.05.2006-23:21:54,67" die ".-:," durch  einen simplen Unterstrich "_" ersetzten? Also das die Ausgabe wie folgt aussieht: 27_05_2006_23_21_54_67 (wobei die letzte Zahl "67" garnicht mehr sein muss).


----------



## Message (30. Mai 2006)

Gut das wichtigste für mich wäre das mit dem automatischen Löschen sobald Summe x an Dateien vorhanden ist, hat dafür vielleicht noch Jemand eine Lösung? Man müsste ja den Dateinamen jeder hochgeladenen Datei in eine Textdatei schreiben und sobald da z.B. 30 Zeilen vorhanden sind den untersten Eintrag auslesen und die Datei mit dem Namen vom Server löschen.


----------



## chrysler (2. Juni 2006)

Du kannst dich aufmachen und mal im Forum suchen.
Deine dritte Frage beantwortest du dir am leichtesten mit >>Suchen.
Danach mal ein bisschen Hirn benutzen oder es bleiben lassen.


----------



## Message (21. Juli 2006)

Danke chrysler für deine supertolle Hilfe!

Ein Problem hab ich nun aber noch. Mein Code sieht so aus:


```
echo put backup.7z backup%date%.7z>> upload.ftp
```

Es soll also nur das aktuelle Datum rangehängt werden. Problem ist, dass unter Windows 2000 Server dadurch folgende Ausgabe erzeugt wird:


```
put backup.7z backupFr 21.07.2006.7z
```

Es wird also nur eine Datei hochgeladen die backupFR heißt, bzw. je nach Wochentag halt zwei andere Endbuchstaben. Wie krieg ich es hin, dass der Wochentag nicht mit ausgegeben wird? Unter Windows XP funktioniert das ganze ohne Probleme, es wird nur das Datum angehängt und die Ausgabe sieht so aus:


```
put backup.7z backup21.07.2006.7z
```


----------

