lampux
Goto Top

Mit Batch-Datei auf Verzeichnis zugreifen - Ordnername nicht bekannt - FTP

Hallo,

ich habe folgendes Problem:

Ich möchte mit einer Batch Datei in ein bestimmtes Verzeichnis gehen z.B:

C:\Users\Lampux\Desktop\Eingang

Nun gibt es im Verzeichnis "Eingang" mehrer Ordner, die jeweils 5 Dateien enthalten.

Ich brauche nun die 5 Dateien der 5 Ordner. Jedoch weis ich nicht wie die Ordner heißen, der Ordnername ist unbekannt und kann auch immer anderst sein. Jedoch benötige ich nur die Ordner mit 9 stelliger Zahlenkomibinaton.
Aber falls das nicht umsetzbar ist, dann gehts natürlich auch, wenn ich alle Ordner nehme, die ich dann anschließend löschen werde.

So heißen die Ordner z.B:

123456789
Files45
Ordner3asdf
lode
kakaka


So in diesen 5 Order sind jeweils 5 Datenbank Dateien, und eig brächte ich nur die 5 Dateien von dem "123456789" Ordner (Dieser Ordner hat aber jedes mal eine andere Zahlenkomination), aber wenn ich alle bekomme ist auch nicht schlimm.

Diese Dateien möchte ich dann anschließend auf FTP hochladen, das passende FTP Script habe ich bereits, jedoch kann ich natürlich die Dateien nicht auswählen, da ich nicht weis, wie auf den unbekannten Ordner zugreifen soll.

set tempftp=%temp%\fileserver.ftp
:# ftp-skript erzeugen
echo OPEN server > %tempftp%
echo USER name pw >> %tempftp%
echo cd /public_html >> %tempftp%
echo send C:\Users\Lampux\Desktop\Eingang\???????????????????? >> %tempftp%
echo disconnect >> %tempftp%
echo quit >> %tempftp%
:# alles ausführen
ftp.exe -n -i -s:%tempftp%
del %tempftp%
pause
exit


Ich hoffe hier kennt sich jemand aus, und kann mir weiterhelfen, das wäre echt nett.

mfg Lampux

Content-ID: 135154

Url: https://administrator.de/contentid/135154

Ausgedruckt am: 22.11.2024 um 19:11 Uhr

bastla
bastla 04.02.2010 um 12:38:59 Uhr
Goto Top
Hallo Lampux und willkommen im Forum!

Etwa so:
@echo on & setlocal
set "Ordner=C:\Users\Lampux\Desktop\Eingang"  

set "Name="  
for /d %%i in ("%Ordner%\*.*") do call :ProcessDir "%%i"  
if not defined Name echo Nicht gefunden & goto :eof
echo Ordnerpfad: %Name%
goto :eof

:ProcessDir
set /a Check=%~n1
if %Check% neq 0 set "Name=%~1"  
goto :eof
Grüße
bastla
Lampux
Lampux 04.02.2010 um 13:08:24 Uhr
Goto Top
Danke bastla für deine Mühe!,

nur würde es mir sehr helfen, wenn du kurz das Script erklären könntest, was es nun genau macht, ob es nun in alle Ordner geht oder nur in die Zahlenkominations-Ordner, aber ich denke mal in alle Ordner usw....

@all

Mir würde es sehr helfen, wenn mir jemand zeigen könnte wie ich nun diese Anweisung in meine Batch-Datei einbauen kann, sodass es auf den FTP Server hochlädt, hier nochmals das Script:

set tempftp=%temp%\fileserver.ftp
:# ftp-skript erzeugen
echo OPEN server > %tempftp%
echo USER name pw >> %tempftp%
echo cd /public_html >> %tempftp%
echo send C:\Users\Lampux\Desktop\Eingang\???????????????????? >> %tempftp%
echo disconnect >> %tempftp%
echo quit >> %tempftp%
:# alles ausführen
ftp.exe -n -i -s:%tempftp%
del %tempftp%
pause
exit


Dort wo die vielen ????? sind, ist die stelle wo man aussuchen muss, welche Datei gesendet werden soll. Hier muss irgendwie dieses Script von bastla ins Spiel kommen. Falls sich jemand auskennt, könnte mir bitte jemand das Script von bastla in mein FTP Script integrieren? Außerdem müsste es bei jedem Uploadvorgang auf dem FTP einen Neuen Ordner erstellen, jedoch dürfen diese natürlich nicht den gleichen Namen besitzen. Nachdem die 5 Dateien der 5 Ordner hochgeladen wurden, soll es beim nächsten Upload wieder einen neuen Ordner erstellen und dort hochladen...usw z.B.:
1. Uploadvorgang (Die Dateien der 5 Ordner) -> Ordner001
2. Uploadvorgang (Die Dateien der 5 Ordner) -> Ordner002
...usw


Hoffentlich kann mir einer helfen face-smile Das würde mich ein großes Stück vorranbringen für heute face-smile

Danke für eure Mühe!

mfg Lampux
bastla
bastla 04.02.2010 um 14:46:11 Uhr
Goto Top
Hallo Lampux!
ob es nun in alle Ordner geht oder nur in die Zahlenkominations-Ordner
"In" Ordner geht es eigentlich nur hinsichtlich des Startordners (siehe unten Zeile 2) - darin werden mit der "for /d"-Schleife alle Unterordner daraufhin untersucht, ob sie einen rein numerischen Namen haben (eine Prüfung, ob dieser auch genau 9 Stellen lang ist, kann ich bei Bedarf nachreichen).

Die Untersuchung des Namens erfolgt in einem Unterprogramm und besteht eigentlich nur darin, den Namen einer numerischen Variablen zuzuweisen - wenn sich aus dem Namen keine gültige Zahl machen lässt, wird der Inhalt der Variablen 0 sein ...

Wenn ein entsprechender Ordner gefunden wird, steht dessen Pfad in %Name% und kann daher unmittelbar in das ftp-Script geschrieben werden - zusammengesetzt also etwa so (das "echo on" wird nach der Testphase natürlich ein "echo off"):
@echo on & setlocal
set "Ordner=C:\Users\Lampux\Desktop\Eingang"  

set "Name="  
for /d %%i in ("%Ordner%\*.*") do call :ProcessDir "%%i"  
if not defined Name echo Nicht gefunden & goto :eof

set tempftp=%temp%\fileserver.ftp
:# ftp-skript erzeugen
echo OPEN server > %tempftp%
echo USER name pw >> %tempftp%
echo cd /public_html >> %tempftp%
echo send %Name% >> %tempftp%
echo disconnect >> %tempftp%
echo quit >> %tempftp%
:# alles ausführen
ftp.exe -n -i -s:%tempftp%
del %tempftp%
pause
goto :eof

:ProcessDir
set /a Check=1%~n1 2>nul || goto :eof
if %Check% neq 0 set "Name=%~1"  
goto :eof
[Edit] Mit 0 beginnende Ordnernamen berücksichtigt [/Edit]

Grüße
bastla
Lampux
Lampux 04.02.2010 um 15:26:25 Uhr
Goto Top
Nachtrag: Okay ich habe das Problem gelöst, so funktonnierts:

echo lcd %Name% >> %tempftp%
echo mput * >> %tempftp%

Jetzt bräuche ich nur noch die Dynamische Ordnererzeugung, wie oben beschrieben, ich hoffe das ist auch noch irgendwie realisierbar face-smile Dann wäre es perfekt face-smile

Zitat:

Außerdem müsste es bei jedem Uploadvorgang auf dem FTP einen Neuen Ordner erstellen, jedoch dürfen diese natürlich nicht den gleichen Namen besitzen. Nachdem die 5 Dateien der 5 Ordner hochgeladen wurden, soll es beim nächsten Upload wieder einen neuen Ordner erstellen und dort hochladen...usw z.B.:
1. Uploadvorgang (Die Dateien der 5 Ordner) -> Ordner001
2. Uploadvorgang (Die Dateien der 5 Ordner) -> Ordner002
...usw

Ungefähr soo: Das ist jetzt nur etwas ganz Grobes. Ich hoffe du weist wie ich es meine face-smile
echo mkdir %dynamisch% >> %tempftp%
echo cd /public_html/%dynamisch% >> %tempftp%
echo lcd %Name% >> %tempftp%
echo mput * >> %tempftp%
echo disconnect >> %tempftp%
echo quit >> %tempftp%


Ich hoffe du kannst mir helfen face-smile

Alte Post: Editiert siehe oben


Vielen Vielen Dank! Das Script funktioniert scheinbar FAST face-big-smile

Hier der Auswurf:

ftp> OPEN soccer92.site11.com
Verbindung mit server.site11.com wurde hergestellt.
220---------- Welcome to Pure-FTPd [TLS] ----------
220-You are user number 51 of 500 allowed.
220-<<
220-Welcome to www.000webhost.com FTP system.
220-We have recently updated all FTP passwords, you can find your new FTP pas
rd
220-By logging on to http://members.000webhost.com/ and clicking on 'View FTP
tails'.
220->>
220-Local time is now 09:18. Server port: 21.
220-This is a private system - No anonymous login
220 You will be disconnected after 3 minutes of inactivity.
ftp> USER user pw
331 User user OK. Password required
230-User user has group access to: a6291919
230-OK. Current restricted directory is /
230-9 files used (0%) - authorized: 6000 files
230 10 Kbytes used (0%) - authorized: 1536000 Kb
ftp> cd /public_html
250 OK. Current directory is /public_html
ftp> send C:\Users\Lampux\Desktop\Eingang\123456789
Fehler beim Öffnen der lokalen Datei C:\Users\Lampux\Desktop\Eingang\123456789.
ftp> disconnect
221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
221 Logout.
ftp> quit

C:\Users\Lampux\Desktop>del C:\Users\Lampux\AppData\Local\Temp\fileserver.ftp

C:\Users\Lampux\Desktop>pause
Drücken Sie eine beliebige Taste . . .


Also den Ordner mit Zahlen erkennt es schon einmal! Jedoch hat es Probleme diese zu öffnen, siehe:

Fehler beim Öffnen der lokalen Datei C:\Users\Lampux\Desktop\Eingang\123456789.

Der Ordner exisitiert natürlich auch, in in ihm befinden sich 5 .txt Dateien.

Woran könnte das liegen?

Wenn du mal Zeit findes, würde ich mich sehr freuen wenn du für mich die "dynamische Ordnererzeugung" für mich realisieren könntest, wie ich es oben beschrieben habe face-smile Aufjedenfall schon mal ein groooßes Danke an dich!

mfg Lampux
bastla
bastla 04.02.2010 um 17:36:27 Uhr
Goto Top
Hallo Lampux!

Soferne Du sicher sein kannst, dass Ordner nur von Deinem Batch erstellt werden, sollte es genügen, die letzte vergebene Nummer in einer Textdatei zu speichern und beim jeweils nächsten Upload hochzuzählen - also (ungetestet) etwa:
set "NrDat=C:\User\Lampux\Nr.txt"  
if not exist "%NrDat%" echo "%NrDat%" nicht gefunden! & goto :eof  
set /p Nr=<"%NrDat%"  
set /a Nr+=1
>"%NrDat%" echo %Nr%  
set "dynamisch=Ordner%Nr:~-3%"  
Danach enthält die Variable %dynamisch% neben dem festen Text "Ordner" eine dreistellige Nummer (inkl. führender Nullen).

Vor dem ersten Start musst Du noch die Textdatei lt Pfad in Zeile 1 erstellen und in die erste Zeile den Wert 1000 schreiben (dann wird beim ersten Aufruf auf 1001 erhöht, wovon die letzen 3 Stellen, also "001", für die Erstellung des dynamischen Ordnernamens verwendet werden).

Grüße
bastla

[Edit] Fehlendes "=" nachgetragen [/Edit]
Lampux
Lampux 05.02.2010 um 08:15:02 Uhr
Goto Top
Danke erstmals nochmal für deine Hilfe!

Ich habe versucht das Script zu integrieren, jedoch funktioniert es nicht so wie ich möchte:

Ich habe mit :: meine Kommentare gekennzeichnet, wo noch etwas nicht funktioniert. Außerdem habe ich die Wörter "Lampux" durch "mr" ersetzt, damit ich es auf einem anderen PC testen kann. Kannst du mir das Script so abändern, damit es funktionstüchtig wird? Das wäre echt super.

@echo on & setlocal
set "Ordner=C:\Users\mr\Desktop\Eingang"

set "Name="
for /d %%i in ("%Ordner%\*.*") do call :ProcessDir "%%i"
if not defined Name echo Nicht gefunden & goto :eof

:: Ich möchte das die .txt Datei mit der Zahl 1000 selbst erstellt wird, deshalb habe ich die nächsten 3 Zeielen hinzgefügt
if exist C:\User\mr\Desktop\Nr.txt goto :hier
echo 1000 > Nr.txt
:hier
set "NrDat=C:\User\mr\Desktop\Nr.txt"
if not exist "%NrDat%" echo "%NrDat%" nicht gefunden! & goto :eof
set /p Nr<"%NrDat%"
set /a Nr+=1
"%NrDat%" echo %Nr%
set "dynamisch=Ordner%Nr:~-3%"

set tempftp=%temp%\fileserver.ftp
:# ftp-skript erzeugen
echo OPEN server > %tempftp%
echo USER user pw >> %tempftp%
echo cd /public_html >> %tempftp%
:: Hier möchte ich nun den neuen Ordner auf dem FTP anlegen, jedoch funktioniert das nicht, ich hoffe du kannst mir dabei helfen
echo mkdir %dynamisch%
:: Das Wechseln in das Verzeichnis geht dann logischerweise auch nicht, da der Ordner nicht existiert
echo cd /public_html/%dynamisch%
echo lcd %Name% >> %tempftp%
echo mput * >> %tempftp%
echo disconnect >> %tempftp%
echo quit >> %tempftp%
:# alles ausführen
ftp.exe -n -i -s:%tempftp%
del %tempftp%
pause
goto :eof

:ProcessDir
if %Check% neq 0 set "Name=%~1"
goto :eof
bastla
bastla 05.02.2010, aktualisiert am 24.07.2012 um 09:05:11 Uhr
Goto Top
Hallo Lampux!

Weshalb der Ordner auf dem Server nicht angelegt wird, kann ich leider auch nicht sagen ... face-sad

Außerdem habe ich die Wörter "Lampux" durch "mr" ersetzt, damit ich es auf einem anderen PC testen kann.
Ist ja eigentlich nicht vom Rechner, sondern vom User abhängig - daher könntest Du den Pfad auch allgemein so festlegen:
set "Ordner=%userprofile%\Desktop\Eingang"
Noch ein Hinweis zur Verwaltung der laufenden Nummer: Wenn Du die Datei "Nr.txt" auf einer Freigabe im Netz ablegst, kann sie von mehreren Rechnern aus verwendet werden.
@echo on & setlocal
set "Ordner=%userprofile%\Desktop\Eingang"  
set "NrDat=C:\User\mr\Desktop\Nr.txt"  
::set "NrDat=\\Server\Freigabe\Nr.txt"  

set "Name="  
for /d %%i in ("%Ordner%\*.*") do call :ProcessDir "%%i"  
if not defined Name echo Nicht gefunden & goto :eof

set /a Nr=1000
if exist "%NrDat%" set /p Nr=<"%NrDat%"  
set /a Nr+=1
>"%NrDat%" echo %Nr%  
set "dynamisch=Ordner%Nr:~-3%"  

set tempftp=%temp%\fileserver.ftp
:# ftp-skript erzeugen
>%tempftp%  echo OPEN server
>>%tempftp% echo USER user pw
>>%tempftp% echo cd /public_html
:: Hier möchte ich nun den neuen Ordner auf dem FTP anlegen, jedoch funktioniert das nicht, ich hoffe du kannst mir dabei helfen
>>%tempftp% echo mkdir %dynamisch%
:: Das Wechseln in das Verzeichnis geht dann logischerweise auch nicht, da der Ordner nicht existiert
>>%tempftp% echo cd /public_html/%dynamisch%
>>%tempftp% echo lcd %Name%
>>%tempftp% echo mput *
>>%tempftp% echo disconnect
>>%tempftp% echo quit
:# alles ausführen
ftp.exe -n -i -s:%tempftp%
del %tempftp%
pause
goto :eof

:ProcessDir
set /a Check=1%~n1 2>nul || goto :eof
if %Check% neq 0 set "Name=%~1"  
goto :eof
BTW: Für die Erstellung des ftp-Scripts finde ich die Schreibweise mit vorangestelltem ">>%tempftp%" lesbarer ...

Grüße
bastla

P.S.: Zum Posten von Batches oder unverändert wiederzugebenden Daten bitte Code-Tags verwenden ...

[Edit] Fehlendes "=" nachgetragen [/Edit]
Lampux
Lampux 05.02.2010 um 08:51:38 Uhr
Goto Top
Danke für deine Bemühungen! DAs Forum hier mit den Usern ist echt die Krönung. face-smile

Okay, natürlich werde ich beim Nächsten mal die Code Tags verwenden face-smile

Zusätzlich so ganz nebenbei, natürlich eins nach dem anderen, aber ich stell sie trotzdem schon mal im Vorraus:

Wie ist es möglich durch 3 unbekannt Ordner durchzugehen und in diesem Ordner alle Dateien, mit mput auf den FTP Verschieben, hier die Ordner Struktur:

C:\User\mr\Desktop\Files\??Unbekannt1??\??Unbekannt2?? /* Komentar: Im "Ordner" Files könnte es auch mal passieren, das es zwei ??Unbekannt" Order gibt, wen dem der Fall ist, sollte der Vorgang erst für ??Unbekannt1?? ausgeführt werden, und anschließne für den zusätzlcien ??Unbekannt?? Order in Files. Natürlich hat der zusätzlich Unbekannte Orderner, die gleiche Struktur wie ??Unbekannt1?? */
Folgende Ordner sind im zweiten ??Ubekannt?? Ordner:
??Unbekannt??
??Unbekannt??
??Unbekannt??
??Unbekannt??
??Unbekannt??
??Unbekannt??
??Unbekannt??

So nun bräuchte ich von dene 7 ??Unbekannt?? Ordner die sich im ??Unbekannt2?? Ordner befinden die Files, also diese möchte ich mit mput auf den ftp schieben. Jedoch möchte ich jene Files ausschließen die über 20MB haben.

Ich hoffe das ist irgendwie realisierbar, ich weis es klingt echt kompliziert. Nachdem habe ich alles und mein Script ist fertig. Ich hoffe du kannst mir helfen. Das wäre echt nett.


//Nachtrag:

Das Script funktioniert fast face-smile Es erhöht leider den Ordnername um +1 nicht. Die Datei C:\User\mr\Desktop\Nr.txt ist natürlich angelegt mit der Zahl 1000. Der erste Order "Ordner001" wurde erstellt, sobald ich die Batch nochmal starte kommt:
550-Can't create directory: File exists

Am Script habe ich nichts geändert, es ist das, das du mir oben geschrieben hast face-smile

Ich hoffe, du findest den Fehler face-smile Das wäre super.

mfg Lampux
bastla
bastla 05.02.2010 um 11:23:45 Uhr
Goto Top
Hallo Lampux!
Es erhöht leider den Ordnername um +1 nicht.
Kann's ja auch gar nicht, wenn ein "=" fehlt ... face-sad

Die Zeile 11 muss so lauten (ich ändere das auch oben):
if exist "%NrDat%" set /p Nr=<"%NrDat%"

Was den Rest angeht, kannst Du Dir einmal das oben bereits verwendete "for /d" ansehen - damit werden alle Unterordner eines Ordners aufgelistet - Alternative (zum Testen von der Kommandozeile, daher mit jeweils nur einem Prozentzeichen):
for /r "C:\User\mr\Desktop\Files" %i in (.) do @echo LW undPfad: "%~dpi" Ordnername: "%~ni"
Die beschriebene Zerlegung (zB "%~ni") kannst Du auch bei der "for /d"-Schleife einsetzen ...

Grüße
bastla
Lampux
Lampux 05.02.2010 um 11:54:57 Uhr
Goto Top
Sorry, das sagen zu müssen, aber leider funktioniert es immer noch nicht.

Ich habe alles mögliche probierte, ohne und mit .txt Datei. Es muss wohl doch noch ein Bug drin sein.

Also es kommt wieder das gleiche wie vorher:

550-Can't create directory: File exists

Ich hab sogar nochmal das Script kopiert, die Zeile editiert, ...aber es funktioniert noch nicht. Der Ordner001 wird erstellt, danach kommt:
550-Can't create directory: File exists

mfg Lampux, Danke für deine Hilfe face-smile
bastla
bastla 05.02.2010 um 12:31:42 Uhr
Goto Top
Hallo Lampux!

Das Ergänzen des "=" im obigen Batch war leider zwischenzeitlich auf der Strecke geblieben face-sad, ist aber jetzt erfolgt ...

Ansonsten: Ein Test (mit etwas anderem Dateipfad und dem Inhalt "1003" in der Datei "Nr.txt") liefert bei mir folgende Ausgabe:
D:\>set "NrDat=D:\Nr.txt"
D:\>set /a Nr=1000
D:\>if exist "D:\Nr.txt" set /p Nr= 0<"D:\Nr.txt"
D:\>set /a Nr+=1
D:\>echo 1004 1>"D:\Nr.txt"
D:\>set "dynamisch=Ordner004"
D:\>echo Ordner004
Ordner004
Der Batch dafür:
@echo on & setlocal
set "NrDat=D:\Nr.txt"  

set /a Nr=1000
if exist "%NrDat%" set /p Nr=<"%NrDat%"  
set /a Nr+=1
>"%NrDat%" echo %Nr%  
set "dynamisch=Ordner%Nr:~-3%"  
echo %dynamisch%
Grüße
bastla
Lampux
Lampux 22.02.2010 um 09:21:21 Uhr
Goto Top
Hallo bastla,

habe nun länger keine Zeit mehr für das Script gefunden. Nun möchte ich jedoch endlich fertigstellen. Eigentlich ist es schon fast fertig, es fehlt nur noch der Feinschliff, wo ich nicht weiterkomme.

Und zwar:

1. Das Script sucht ja nach einem Ordner bei dem es Möglich ist eine Quersumme zu bilden und geht in diesen Ordner rein. Das Problem: Sobald es zwei Ordner sind, bei denen der Ordnername aus Zahlen besteht (Quersumme möglich) öffnet er nur einen und führt die Operation auch nur an diesem einen aus. Frage ist es nicht irgenwie möglich, das es die Operation also ">>%tempftp% echo mput * " bei allen Ordner ausführt, deren Ordnernamen aus Zahlen bestehen? Könntest du mir das noch eventuell reincoden? Das wäre echt super.

2. Das Script beinhaltet, das Ordneranlegen von dem Muster "Ordner001", dabei sollte es hochzählen, sodass beim nächsten Uploadvorgang "Ordner002" entsteht. Das funktioniert aber leider echt noch nicht, aufjedenfall nicht so wie es im obigen Script steht. Ab das macht nichts, da mir eine bessere Lösung dazu eingfallen ist. Es wäre besser wenn es auf dem Webspace prüft ob der Ordner001 schon verhanden ist, wenn ja, dann sollte ein Ordner002 angelegt werden, wenn Ordner002 vorhand ist, dann Ordner003 anlegen....usw ....so wäre es besser und vll funktioniert es so besser face-smile

Wenn diese zwei Dinge noch funktonieren würden, dann wäre das Script endlich abgeschlossen face-smile Ich hoffe du hilfst mir dabei nocheinmal face-smile

mfg Lampux
bastla
bastla 22.02.2010 um 17:41:20 Uhr
Goto Top
Hallo Lampux!

Um alle passenden Ordner zu verarbeiten, könnte in der Schleife jeweils ein eigener Übertragungsvorgang durchgeführt werden, also etwa:
@echo off & setlocal
set "Ordner=%userprofile%\Desktop\Eingang"  
::set "NrDat=\\Server\Freigabe\Nr.txt"  

for /d %%i in ("%Ordner%\*.*") do call :ProcessDir "%%i"  
goto :eof

:ProcessDir
set /a Check=1%~n1 2>nul || goto :eof
if %Check% equ 0 goto :eof
set "Name=%~1"  

:: Version mit Zähler
::set /a Nr=1000
::if exist "%NrDat%" set /p Nr=<"%NrDat%"  
::set /a Nr+=1
::>"%NrDat%" echo %Nr%  
::set "dynamisch=Ordner%Nr:~-3%"  

::
:: ftp-Inhaltsverzeichnis auslesen und %dynamisch% ermitteln
::

set tempftp=%temp%\fileserver.ftp
:# ftp-skript erzeugen
>%tempftp%  echo OPEN server
>>%tempftp% echo USER user pw
>>%tempftp% echo cd /public_html
>>%tempftp% echo mkdir %dynamisch%
>>%tempftp% echo cd /public_html/%dynamisch%
>>%tempftp% echo lcd %Name%
>>%tempftp% echo mput *
>>%tempftp% echo disconnect
>>%tempftp% echo quit
:# alles ausführen
ftp.exe -n -i -s:%tempftp%
del %tempftp%
pause
goto :eof

Was das Auslesen der bereits am Server vorhandenen Ordner anlangt: Poste bitte das Format, in dem das per ftp abgerufene Inhaltsverzeichnis dargestellt wird ...

Grüße
bastla

[Edit] Fehlendes "u" bei "equ" ergänzt [/Edit]
Lampux
Lampux 22.02.2010 um 18:31:57 Uhr
Goto Top
Leider funktioniert das Script noch nicht ganz, es kommt immer folgende Fehlermeldung (nach ewigen DRUCK Versuchen hab ich sie endlich erwischt ^^)

"eq" kann syntaktisch an dieser Stelle nicht verarbeitet werden.

Zum Format des FTP Verzeichnis:

Ich verstehe nicht genau was du meinst, aber ich sage ein paar Sätze dazu.

Also ich logge mich per FireFTP auf den FTP Server. Nun muss ich in den Ordner public_html gehen um die online Dateien zu sehen. Nun sehe ich alle Dateien die gerade auf meinem FTP sind. An erster Stelle steht "Ordner001" und danach kommen nichts mehr.

Erkläre bitte genauer was du meinst, ich verstehs noch nicht ganz face-smile
bastla
bastla 22.02.2010 um 19:05:19 Uhr
Goto Top
Hallo Lampux!
"eq" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
Mit "equ" solltest Du bessere Chancen haben (sorry - ich korrigier's oben) ...
Da ja nicht Du, sondern Dein Script im entsprechenden Ordner nachsehen soll, war gemeint, wie die Ausgabe eines per "ftp" durchgeführten "dir" aussieht - also
OPEN server 
USER user pw
dir /public_html
Die Zeile für einen Ordner könnte dann zB so aussehen:
drwxr-x---   2 web      web          4096 Jan 31  2010 ordner001
Grüße
bastla

P.S.:
nach ewigen DRUCK Versuchen hab ich sie endlich erwischt
Batches solltest Du aus einer geöffneten CMD-Shell heraus testen - dann kannst Du auch Fehlermeldungen ganz entspannt lesen ...
Lampux
Lampux 23.02.2010 um 10:47:30 Uhr
Goto Top
Okay Danke, es befindet sich nun ein Ordner, der zwei Textdateien beinhaltet auf dem FTP. Hier dazu das Format:

drwxr-x--- 3 a6291919 99 4096 Feb 23 04:37 .
drwx--x--x 3 a6291919 a6291919 4096 Feb 4 05:27 ..
drwxr-xr-x 2 a6291919 a6291919 4096 Feb 23 04:37 Ordner001

Das Script läuft nun wieder, leider lädt es aber nur die Dateien von einem Order hoch und nicht von den beiden (bei denen der Ordnername aus Zahlen besteht). Ich denke das hängt damit zusammen, das die Dateien in den beiden ZahlenOrdner gleich heisen. Also müsste es zwei Ordner auf dem FTP erstellen, für beide Zahlenordner. Ich hoffe das ist irgendwie noch einzubauen. Man sollte aber bedenken, das es nicht immer zwei Zahlenordner sind, meistens ist es nur einer, manchmal aber auch 3. Es müsste einfach für jeden Zahlenordner einen Neuen Order auf dem FTP anlegen. Ich denke dann würde das Script funktionieren.

Ich hoffe das ist irgendwie realisierbar face-smile

mfg Lampux
bastla
bastla 24.02.2010 um 01:01:54 Uhr
Goto Top
Hallo Lampux!

Wenn die zwei (oder mehr) Ordner jeweils unmittelbare Unterordner von "Eingang" sind, kann ich nicht nachvollziehen, dass nur einer davon verarbeitet würde - daher ändere ich diesen Teil des Batches für's Erste nicht ...

In der folgenden (weitgehend ungetesteten Version) sollte das Auslesen und Hochzählen der Ordnernummer klappen:
@echo off & setlocal
set "Ordner=%userprofile%\Desktop\Eingang"  

set "tempftpdir=%temp%\ftpdir.txt"  
set "tempftp=%temp%\fileserver.ftp"  
:# ftp-Skript zum Lesen des Inhaltsverzeichnisses erzeugen
>%tempftp%  echo OPEN server
>>%tempftp% echo USER user pw
>>%tempftp% echo dir /public_html
>>%tempftp% echo bye

del "%tempftpdir%" 2>nul  
for /f "tokens=9" %%i in ('ftp.exe -n -s:%tempftp%|findstr /b "d"|findstr "Ordner"') do >>"%tempftpdir%" echo %%i  
for /f %%i in ('sort "%tempftpdir%"') do set "Nr=%%i"  
set /a Nr=1%Nr:~6% + 1
echo Naechste Ordnernummer: %Nr:~-3%

for /d %%i in ("%Ordner%\*.*") do call :ProcessDir "%%i"  
goto :eof

:ProcessDir
set /a Check=1%~n1 2>nul || goto :eof
if %Check% equ 0 goto :eof
set "Name=%~1"  

set "dynamisch=Ordner%Nr:~-3%"  
set /a Nr+=1
:# ftp-skript erzeugen
>%tempftp%  echo OPEN server
>>%tempftp% echo USER user pw
>>%tempftp% echo cd /public_html
>>%tempftp% echo mkdir %dynamisch%
>>%tempftp% echo cd /public_html/%dynamisch%
>>%tempftp% echo lcd %Name%
>>%tempftp% echo mput *
>>%tempftp% echo disconnect
>>%tempftp% echo quit
:# alles ausführen
ftp.exe -n -i -s:%tempftp%
pause
goto :eof
Grüße
bastla
Lampux
Lampux 24.02.2010 um 08:54:48 Uhr
Goto Top
Folgende Fehlerausgabe kommt nun:

"|" kann syntaktisch an dieser Stelle nicht verarbeitet werden.

Zu den Ordnern:

Ja, die zwei oder mehrer Ordner sind Unterordner von dem Ordner "Eingang", diese Unterordner beinhalten jeweils 2 Dateien, die den GLEICHEN Namen besitzen. Deshalb werden sie vermutlich überschrieben. Deshalb sollte bei alle Unterordnern beim Upload deren Dateien ein neuer Order auf dem FTP angelegt werden.

Struktur:

Eingang: -> 123456789 - > 2.txt & 3.txt
Eingang: -> 234567891 - > 2.txt & 3.txt

So nun erstellt es einen Ordner auf dem FTP (funktioniert noch nicht ganz ;) ) und speichert dort die Dateien 2.txt & 3.txt ab, jedoch stammen diese entweder von dem Ordner 123456789 oder 234567891.

Ich hoffe du verstehst was ich meine face-smile und hoffe das es irgendwie umzusetzen ist.

mfg Lampux
bastla
bastla 24.02.2010 um 09:37:53 Uhr
Goto Top
Hallo Lampux!

Sorry - war dann doch schon etwas spät ... face-sad

Ändere die Zeile 13 auf
for /f "tokens=9" %%i in ('ftp.exe -n -s:%tempftp%^|findstr /b "d"^|findstr "Ordner"') do >>"%tempftpdir%" echo %%i
Grüße
bastla
Lampux
Lampux 24.02.2010 um 11:09:45 Uhr
Goto Top
Macht nichts, ich bin froh wenn du es überhaupt machst face-smile

Bugreport ;) Habe das nun alles ausführlich eine Stunde lang getestet:

Also, erster Bug habe ich bereits selbst behoben, das "pause" am Schluss musst entfernt werden, deshalb hatte es immer nur einen Ordner verarbeitet.

Nun ist es so:

Wenn es nur ein Zahlenordner gibt:

Max. 3 Uploadvorgäng ab dem 4. kommt 550-Can't create directory: File exists
Uploadvorgänge im einzelnen:

1. Ordner1
2. Ordner12
3. Ordner113
4. - undendlich: 550-Can't create directory: File exists (Dort versucht es den Ordner113 nochmal anzulegen)

Wenn es zwei Zahlenordner sind:

1. Ordner1 (liegen die Daten vom ersten Zahlenordner)
2. Ordner2 (liegen die Daten vom zweiten Zahlenordner)
3. Ordner13 (liegen die Daten vom ersten Zahlenordner)
4. Ordner14 (liegen die Daten vom zweiten Zahlenordner)
5. - unendlich: 550-Can't create directory: File exists (Dort versucht es den Ordner13 anzulegen)

Wenn es drei Zahlenordner sind:

1. Ordner1 (liegen die Daten vom 1. Zahlenordner)
2. Ordner2 (liegen die Daten vom 2. Zahlenordner)
3. Ordner3 (liegen die Daten vom 3. Zahlenordner)
4. Ordner14 liegen die Daten vom 1. Zahlenordner)
5. Ordner15 (liegen die Daten vom 2. Zahlenordner)
6. Ordner16 (liegen die Daten vom 3. Zahlenordner)
5. - unendlich: 550-Can't create directory: File exists (Dort versucht es den Ordner14 anzulegen)

In der Temp Datei stehen die Zahlen der erstellen Ordner auf dem FTP.

Es muss sich irgendwo noch ein Fehler befinden, der in der Ordnernamensvergebung steckt. Aber ich denke wir sind ganz nah an der Lösung dran.

Ich hoffe du findest den Fehler face-smile

mfg Lampux
bastla
bastla 24.02.2010 um 14:08:49 Uhr
Goto Top
Hallo Lampux!

Füge vor Zeile 14 ein:
set "Nr=1001"
und wenn Du schon dabei bist, könntest Du noch die Zeile 15 auf
set /a Nr=1%Nr:~-3% + 1 
ändern ...

Ich hatte leider unterstellt, dass es schon einen Ordner "Ordner001" gäbe - wenn dieser (oder ein anderer mit dreistelliger Nummer benannter) Ordner noch nicht vorhanden ist, braucht es die Vorgabe der Nummer "001" (dazu dient die erste Codezeile oben).

Grüße
bastla
Lampux
Lampux 25.02.2010 um 13:58:50 Uhr
Goto Top
Vielen Vielen Dank bastla, ich habe nun noch das Script fertig programmiert, und es läuft 1A! Echt ein großes Danke an dich! Mit dem Script spare ich mir nun täglich eine Menge Zeit face-smile

mfg Lampux