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
GELÖST

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

Frage Entwicklung Batch & Shell

Mitglied: Lampux

Lampux (Level 1) - Jetzt verbinden

04.02.2010 um 11:58 Uhr, 11079 Aufrufe, 22 Kommentare

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
Mitglied: bastla
04.02.2010 um 12:38 Uhr
Hallo Lampux und willkommen im Forum!

Etwa so:
01.
@echo on & setlocal 
02.
set "Ordner=C:\Users\Lampux\Desktop\Eingang" 
03.
 
04.
set "Name=" 
05.
for /d %%i in ("%Ordner%\*.*") do call :ProcessDir "%%i" 
06.
if not defined Name echo Nicht gefunden & goto :eof 
07.
echo Ordnerpfad: %Name% 
08.
goto :eof 
09.
 
10.
:ProcessDir 
11.
set /a Check=%~n1 
12.
if %Check% neq 0 set "Name=%~1" 
13.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: Lampux
04.02.2010 um 13:08 Uhr
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 Das würde mich ein großes Stück vorranbringen für heute

Danke für eure Mühe!

mfg Lampux
Bitte warten ..
Mitglied: bastla
04.02.2010 um 14:46 Uhr
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"):
01.
@echo on & setlocal 
02.
set "Ordner=C:\Users\Lampux\Desktop\Eingang" 
03.
 
04.
set "Name=" 
05.
for /d %%i in ("%Ordner%\*.*") do call :ProcessDir "%%i" 
06.
if not defined Name echo Nicht gefunden & goto :eof 
07.
 
08.
set tempftp=%temp%\fileserver.ftp 
09.
:# ftp-skript erzeugen 
10.
echo OPEN server > %tempftp% 
11.
echo USER name pw >> %tempftp% 
12.
echo cd /public_html >> %tempftp% 
13.
echo send %Name% >> %tempftp% 
14.
echo disconnect >> %tempftp% 
15.
echo quit >> %tempftp% 
16.
:# alles ausführen 
17.
ftp.exe -n -i -s:%tempftp% 
18.
del %tempftp% 
19.
pause 
20.
goto :eof 
21.
 
22.
:ProcessDir 
23.
set /a Check=1%~n1 2>nul || goto :eof 
24.
if %Check% neq 0 set "Name=%~1" 
25.
goto :eof
[Edit] Mit 0 beginnende Ordnernamen berücksichtigt [/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: Lampux
04.02.2010 um 15:26 Uhr
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 Dann wäre es perfekt

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
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
Alte Post: Editiert siehe oben


Vielen Vielen Dank! Das Script funktioniert scheinbar FAST

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 Aufjedenfall schon mal ein groooßes Danke an dich!

mfg Lampux
Bitte warten ..
Mitglied: bastla
04.02.2010 um 17:36 Uhr
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:
01.
set "NrDat=C:\User\Lampux\Nr.txt" 
02.
if not exist "%NrDat%" echo "%NrDat%" nicht gefunden! & goto :eof 
03.
set /p Nr=<"%NrDat%" 
04.
set /a Nr+=1 
05.
>"%NrDat%" echo %Nr% 
06.
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]
Bitte warten ..
Mitglied: Lampux
05.02.2010 um 08:15 Uhr
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
set /a Check=1%~n1 2>nul || goto :eof
if %Check% neq 0 set "Name=%~1"
goto :eof
Bitte warten ..
Mitglied: bastla
05.02.2010, aktualisiert 24.07.2012
Hallo Lampux!

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

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.
01.
@echo on & setlocal 
02.
set "Ordner=%userprofile%\Desktop\Eingang" 
03.
set "NrDat=C:\User\mr\Desktop\Nr.txt" 
04.
::set "NrDat=\\Server\Freigabe\Nr.txt" 
05.
 
06.
set "Name=" 
07.
for /d %%i in ("%Ordner%\*.*") do call :ProcessDir "%%i" 
08.
if not defined Name echo Nicht gefunden & goto :eof 
09.
 
10.
set /a Nr=1000 
11.
if exist "%NrDat%" set /p Nr=<"%NrDat%" 
12.
set /a Nr+=1 
13.
>"%NrDat%" echo %Nr% 
14.
set "dynamisch=Ordner%Nr:~-3%" 
15.
 
16.
set tempftp=%temp%\fileserver.ftp 
17.
:# ftp-skript erzeugen 
18.
>%tempftp%  echo OPEN server 
19.
>>%tempftp% echo USER user pw 
20.
>>%tempftp% echo cd /public_html 
21.
:: Hier möchte ich nun den neuen Ordner auf dem FTP anlegen, jedoch funktioniert das nicht, ich hoffe du kannst mir dabei helfen 
22.
>>%tempftp% echo mkdir %dynamisch% 
23.
:: Das Wechseln in das Verzeichnis geht dann logischerweise auch nicht, da der Ordner nicht existiert 
24.
>>%tempftp% echo cd /public_html/%dynamisch% 
25.
>>%tempftp% echo lcd %Name% 
26.
>>%tempftp% echo mput * 
27.
>>%tempftp% echo disconnect 
28.
>>%tempftp% echo quit 
29.
:# alles ausführen 
30.
ftp.exe -n -i -s:%tempftp% 
31.
del %tempftp% 
32.
pause 
33.
goto :eof 
34.
 
35.
:ProcessDir 
36.
set /a Check=1%~n1 2>nul || goto :eof 
37.
if %Check% neq 0 set "Name=%~1" 
38.
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]
Bitte warten ..
Mitglied: Lampux
05.02.2010 um 08:51 Uhr
Danke für deine Bemühungen! DAs Forum hier mit den Usern ist echt die Krönung.

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

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

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

mfg Lampux
Bitte warten ..
Mitglied: bastla
05.02.2010 um 11:23 Uhr
Hallo Lampux!
Es erhöht leider den Ordnername um +1 nicht.
Kann's ja auch gar nicht, wenn ein "=" fehlt ...

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
Bitte warten ..
Mitglied: Lampux
05.02.2010 um 11:54 Uhr
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
Bitte warten ..
Mitglied: bastla
05.02.2010 um 12:31 Uhr
Hallo Lampux!

Das Ergänzen des "=" im obigen Batch war leider zwischenzeitlich auf der Strecke geblieben , 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:
01.
@echo on & setlocal 
02.
set "NrDat=D:\Nr.txt" 
03.
 
04.
set /a Nr=1000 
05.
if exist "%NrDat%" set /p Nr=<"%NrDat%" 
06.
set /a Nr+=1 
07.
>"%NrDat%" echo %Nr% 
08.
set "dynamisch=Ordner%Nr:~-3%" 
09.
echo %dynamisch%
Grüße
bastla
Bitte warten ..
Mitglied: Lampux
22.02.2010 um 09:21 Uhr
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

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

mfg Lampux
Bitte warten ..
Mitglied: bastla
22.02.2010 um 17:41 Uhr
Hallo Lampux!

Um alle passenden Ordner zu verarbeiten, könnte in der Schleife jeweils ein eigener Übertragungsvorgang durchgeführt werden, also etwa:
01.
@echo off & setlocal 
02.
set "Ordner=%userprofile%\Desktop\Eingang" 
03.
::set "NrDat=\\Server\Freigabe\Nr.txt" 
04.
 
05.
for /d %%i in ("%Ordner%\*.*") do call :ProcessDir "%%i" 
06.
goto :eof 
07.
 
08.
:ProcessDir 
09.
set /a Check=1%~n1 2>nul || goto :eof 
10.
if %Check% equ 0 goto :eof 
11.
set "Name=%~1" 
12.
 
13.
:: Version mit Zähler 
14.
::set /a Nr=1000 
15.
::if exist "%NrDat%" set /p Nr=<"%NrDat%" 
16.
::set /a Nr+=1 
17.
::>"%NrDat%" echo %Nr% 
18.
::set "dynamisch=Ordner%Nr:~-3%" 
19.
 
20.
:: 
21.
:: ftp-Inhaltsverzeichnis auslesen und %dynamisch% ermitteln 
22.
:: 
23.
 
24.
set tempftp=%temp%\fileserver.ftp 
25.
:# ftp-skript erzeugen 
26.
>%tempftp%  echo OPEN server 
27.
>>%tempftp% echo USER user pw 
28.
>>%tempftp% echo cd /public_html 
29.
>>%tempftp% echo mkdir %dynamisch% 
30.
>>%tempftp% echo cd /public_html/%dynamisch% 
31.
>>%tempftp% echo lcd %Name% 
32.
>>%tempftp% echo mput * 
33.
>>%tempftp% echo disconnect 
34.
>>%tempftp% echo quit 
35.
:# alles ausführen 
36.
ftp.exe -n -i -s:%tempftp% 
37.
del %tempftp% 
38.
pause 
39.
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]
Bitte warten ..
Mitglied: Lampux
22.02.2010 um 18:31 Uhr
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
Bitte warten ..
Mitglied: bastla
22.02.2010 um 19:05 Uhr
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 ...
Bitte warten ..
Mitglied: Lampux
23.02.2010 um 10:47 Uhr
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

mfg Lampux
Bitte warten ..
Mitglied: bastla
24.02.2010 um 01:01 Uhr
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:
01.
@echo off & setlocal 
02.
set "Ordner=%userprofile%\Desktop\Eingang" 
03.
 
04.
set "tempftpdir=%temp%\ftpdir.txt" 
05.
set "tempftp=%temp%\fileserver.ftp" 
06.
:# ftp-Skript zum Lesen des Inhaltsverzeichnisses erzeugen 
07.
>%tempftp%  echo OPEN server 
08.
>>%tempftp% echo USER user pw 
09.
>>%tempftp% echo dir /public_html 
10.
>>%tempftp% echo bye 
11.
 
12.
del "%tempftpdir%" 2>nul 
13.
for /f "tokens=9" %%i in ('ftp.exe -n -s:%tempftp%|findstr /b "d"|findstr "Ordner"') do >>"%tempftpdir%" echo %%i 
14.
for /f %%i in ('sort "%tempftpdir%"') do set "Nr=%%i" 
15.
set /a Nr=1%Nr:~6% + 1 
16.
echo Naechste Ordnernummer: %Nr:~-3% 
17.
 
18.
for /d %%i in ("%Ordner%\*.*") do call :ProcessDir "%%i" 
19.
goto :eof 
20.
 
21.
:ProcessDir 
22.
set /a Check=1%~n1 2>nul || goto :eof 
23.
if %Check% equ 0 goto :eof 
24.
set "Name=%~1" 
25.
 
26.
set "dynamisch=Ordner%Nr:~-3%" 
27.
set /a Nr+=1 
28.
:# ftp-skript erzeugen 
29.
>%tempftp%  echo OPEN server 
30.
>>%tempftp% echo USER user pw 
31.
>>%tempftp% echo cd /public_html 
32.
>>%tempftp% echo mkdir %dynamisch% 
33.
>>%tempftp% echo cd /public_html/%dynamisch% 
34.
>>%tempftp% echo lcd %Name% 
35.
>>%tempftp% echo mput * 
36.
>>%tempftp% echo disconnect 
37.
>>%tempftp% echo quit 
38.
:# alles ausführen 
39.
ftp.exe -n -i -s:%tempftp% 
40.
pause 
41.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: Lampux
24.02.2010 um 08:54 Uhr
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 und hoffe das es irgendwie umzusetzen ist.

mfg Lampux
Bitte warten ..
Mitglied: bastla
24.02.2010 um 09:37 Uhr
Hallo Lampux!

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

Ä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
Bitte warten ..
Mitglied: Lampux
24.02.2010 um 11:09 Uhr
Macht nichts, ich bin froh wenn du es überhaupt machst

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

mfg Lampux
Bitte warten ..
Mitglied: bastla
24.02.2010 um 14:08 Uhr
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
Bitte warten ..
Mitglied: Lampux
25.02.2010 um 13:58 Uhr
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

mfg Lampux
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...