Top-Themen

Aktuelle Themen (A bis Z)

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 Per Batch Dateien in einem gewissen Ordner je nach Dateiendung über FTP archivieren

Mitglied: LittleFlame

LittleFlame (Level 1) - Jetzt verbinden

18.07.2009, aktualisiert 21:06 Uhr, 6072 Aufrufe, 5 Kommentare

Schönen Samstag an alle.
Ich verbringe meinen Samstag gerade damit, ein bisschen mit meinem FTP zu spielen. Leider bin ich noch ganz neu in der "Branche" und habe deshalb etwas Nachhilfe nötig. Eventuell findet sich ja der ein oder andere, der mir behilflich sein möchte.
Vielleicht ist es ja ganz einfach. Ne lustige Bastelei ist es allemal:

Ich habe versucht, einen ähnlichen Beitrag zu finden, habe jedoch nichts dergleichen entdeckt.
Wenn trotzdem bereits vorhanden, bitte ich nur um eine kurze Ohrfeige und den Link
Also: Mein Problem:
Ich möchte per Batch alle Dateien eines gewissen Ordners je nach Dateiendung per FTP in gewisse Ordner auf mein NAS übertragen.
Ich weiss, es wäre ohne Batch evtl einfacher realisierbar, aber man kennt das ja, egal ob es einen einfacheren Weg gibt: Wenn das Script nicht funktioniert, dann will man es zum laufen kriegen
Momentan scheitere ich jedoch daran, die Dateien sauber in die (eventuell) benötigte Ftp-Datei zu schreiben.
Ich habe momentan zwei Ideen, wie ich das ganze lösen möchte, stehe jedoch bei beidem momentan etwas auf dem Schlauch

Also hier mal meine bisherigen Basteleien:

Möglichkeit 1 per extra FTP-Datei:

echo on

rem Nun folgt der zu archivierende Ordner
cd c:\Ftp

rem Und hier liegen meine Scripts immer
dir /B > C:\Batch\dateien.txt


rem Variablen für die Dateiendungen
set mp3=Mp3s & set jpg=Bilder & set mpg=Videos & set avi=Videos & set iso=Images & set nfo=Images & set rar=Temp & set bat=Batch
cd C:\Batch

rem Und nun folgt der Teil in dem ich den Fehler vermute
for /f "tokens=2 delims=. " %%i in (dateien.txt) do

rem In der FTP datei fehlt hier natürlich dann noch das jeweilige "Send + späterer Ordnername"
rem Gewünschter Effekt: dateiname.dateiendung /
echo %i.%j /!%j! > send.txt
ftp.exe -n -i -s:send.txt
disconnect
quit




Möglichkeit 2 mit nur einer Datei:


echo on
set mp3=Mp3z & set jpg=Bilder & set mpg=Videos & set avi=Videos & set iso=Images & set nfo=Images & set rar=Temp & set bat=Batch
cd C:\FTP
for /f "tokens=2 delims=." %%i in (*.*) do
ftp.exe -n -i
open "ftpadresse"
login
passwort
send %i.%j /!%j!
disconnect
quit


(Kommentare hab ich beim zweiten mal weggelassen. Gewünschter Effekt is ja der selbe)

Und noch ne kurze Frage zu Möglichkeit 2:
Hier ist es doch so, dass für jede Datei die FTP verbindung neu hergestellt wird. Ist es möglich die Verbingdung vorher herzustellen und die Variablen dann einzulesen?

Wie gesagt: Bin recht neu, deshalb habt Erbarmen, wenn das Script ganz schrecklich ist. (*Z.b. Bastla oder Biber anschau*)

Vielen Dank im voraus und schönes Wochenende noch

LittleFlame
Mitglied: bastla
18.07.2009 um 21:55 Uhr
Hallo LittleFlame!

Vorweg: Die Variante 1 hätte aus meiner Sicht den (zusätzlichen) Vorteil, dass durch die erstellte "send.txt" dokumentiert wird, welche Dateien verarbeitet wurden (mein Vorschlag unten kommt ohne eine "dateien.txt" aus und berücksichtigt auch nur die vorgesehenen Dateitypen) ...
Grundsätzlich sollte sich das etwa so wie von Dir skizziert machen lassen, hinsichtlich der Batch-Details (und besonders der "for"-Schleife) besteht allerdings tatsächlich noch Optimierungspotenzial .
Schematisch, ungetestet und als Code formatiert könnte das dann etwa so aussehen:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "Ordner=c:\Ftp" 
03.
set "send=C:\Batch\send.txt" 
04.
 
05.
set "mp3=Mp3s" & set "jpg=Bilder" & set "mpg=Videos" & set "avi=Videos" 
06.
set "iso=Images" & set "nfo=Images" & set "rar=Temp" & set "bat=Batch" 
07.
 
08.
::in den Ordner wechseln 
09.
pushd "%Ordner%" 
10.
::Kopf der ftp-Datei erstellen 
11.
>"%send%"  echo open "ftpadresse" 
12.
>>"%send%" echo login 
13.
>>"%send%" echo passwort 
14.
::Schleife über alle Dateien 
15.
for /f "tokens=1-2 delims=." %%i in ('dir /b') do if defined %%j >>"%send%" echo send %%i.%%j /!%%j! 
16.
::Fuß der ftp-Datei 
17.
>>"%send%" echo disconnect 
18.
>>"%send%" echo quit 
19.
 
20.
::und ab dafür ... 
21.
ftp.exe -n -i -s:"%send%" 
22.
 
23.
::der Ordnung halber: 
24.
popd
Mit dem "if defined %%j" in der "for"-Schleife soll errreicht werden, dass die Verarbeitung auf die vorgegebenen Dateitypen beschränkt wird - wenn sich also im untersuchten Ordner eine "txt"-Datei befindet, es aber keine Variable %txt% gibt, wird diese Datei auch nicht in die "send.txt" aufgenommen. Wenn Du diese Einschränkung nicht machen willst (und damit leben kannst, dass alle nicht berücksichtigten Dateitypen als Ziel den Root-Ordner "/" erhalten) kannst Du die "defined"-Prüfung auch weg lassen.
Noch eine Anmerkung: Durch die "delayedExpansion" und die Aufteilung der Dateinamen am "." wird es Probleme mit Dateien, welche im Namen "!" oder "." enthalten, geben. Zumindest die "delayedExpansion" ließe sich durch die folgende Zeile umgehen:
for /f "tokens=1-2 delims=." %%i in ('dir /b') do if defined %%j >>"%send%" call echo send %%i.%%j /%%%%j%%
Damit auch die Zerlegung keine Probleme bereitet, könnte die Zeile etwa so aussehen:
for %%i in ("%Ordner%\*.*") do if defined %%~xi >>"%send%" call echo send "%%~nxi" /%%%%~xi%%
Dann müssten allerdings die Ordner je Typ nach dem folgenden Muster festgelegt werden:
set ".mp3=Mp3s"
da "%%~xi" nicht nur den Typ, sondern auch den "." liefert.

Grüße
bastla
Bitte warten ..
Mitglied: LittleFlame
18.07.2009 um 22:09 Uhr
Sodala... Ich fühl mich ja schon fast geehrt, dass meine Frage von dir beantwortet wurde. Hab schon viele Posts von dir gelesen.
Ich hoffe, dass ich mich mit meinem Batch "Versuch" nicht ganz blamiert habe ^^
Ich werde deine Lösung gleich mal testen und Info geben, ob sie so funktioniert, obwohl ich mir ziemlich sicher bin, dass es richtig is.

Schönen Abend noch, falls man sich heute nichtmehr schreibt

Grüße LittleFlame
Bitte warten ..
Mitglied: LittleFlame
19.07.2009 um 15:57 Uhr
Hallo Bastla

Hmmm, ok. Ich bin gerade am testen und es sieht gut aus. Aber ich hätte noch ne Frage:
Was bewirkt in diesem Fall das folgende nach dem "if defined"?

do if defined %%~xi >>"%send%" call echo send "%%~nxi" /%%%%~xi%%

das ~x und das ~nx sind mir neu.

Wie gesagt, bin n ziemlicher Frischling auf dem Gebiet.

Danke schonmal.
Bitte warten ..
Mitglied: bastla
19.07.2009 um 16:11 Uhr
Hallo LittleFlame!
Was bewirkt in diesem Fall das folgende nach dem "if defined"?
Mit
 >>"%send%"
wird festgelegt, dass das Ergebnis der folgenden Anweisung an die "send.txt" angefügt werden soll.
Das "call" erspart die "delayedExpansion", indem es in einem neuen CMD-Kontext den Rest der Zeile auflöst, wofür die Schreibweise mit jeweils verdoppelten %-Zeichen erforderlich ist:
/%%%%~xi%%
wird damit zu (für die Beispieldatei "test.jpg")
/%.jpg%
und nach der Ausgabe per "echo" daher zu
/Bilder
Durch
%%~xi
wird aus dem übergebenen Dateinamen (bzw -pfad) in %%i (im Beispiel also "test.jpg") die Extension .jpg extrahiert.
Analog dazu liefert
%%~ni
nur den Dateinamen (ohne Pfad davor und Typ dahinter), also: test

Nachzulesen ist das in der Hilfe zu "for" (for /?) gegen Ende ...

Grüße
bastla
Bitte warten ..
Mitglied: LittleFlame
20.07.2009 um 11:13 Uhr
Hallo Bastla,

noch einmal vielen Dank.
Habe zwar schon mehrfach die "for" Hilfe gelsen, aber der Teil scheint mir wieder entfallen zu sein.
Meinerseits ist alles ok und verstanden. Ich bedanke mich für die Hilfe und Geduld.
Thread gelöst.

Danke,

LittleFlame
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Dateien in einen Ordner zählen mit einer bestimmten Dateiendung

Frage von tommhiiBatch & Shell4 Kommentare

Hallo , ich hab da mal ne Frage ich möchte in einen bestimmten Ordner nur Dateien mit der Endung ...

Batch & Shell

FTP Batch mit Semaphoren Datei

Frage von DirkK73Batch & Shell1 Kommentar

Hallo zusammen, ich bräuchte Eure Hilfe beim Erstellen eines Batches das folgende Aufgabe hat: Wir haben interne virtuelle Server. ...

Batch & Shell

Batch mit forfiles - Dateiendung filtern - Dateien löschen

Frage von mschaedler1982Batch & Shell2 Kommentare

Hallo zusammen, ich habe hier eine Batch Datei geschrieben, die an sich funktioniert. (Wenn man den Code zeilenweise kopiert ...

Batch & Shell

Batch Datei : Via FTP - Ordner und darin enthaltene Dateien lokal downloaden

Frage von koehloBatch & Shell

Ich habe folgendes Problem. Ich möchte auf einen FTP zugreifen und die darin enthaltenen Ordner inkl. den, in den ...

Neue Wissensbeiträge
Server-Hardware
HP iLO ist gefährdet (iLO 4))
Tipp von AlFalcone vor 11 StundenServer-Hardware2 Kommentare

Gemäss Twitter und Heise gibt es eine Angriffsmöglichkeit auf iLO Quelle: iLO ist gefährdet

CMS
Erneut kritische Zero-Day-Lücke in Drupal
Tipp von Reini82 vor 20 StundenCMS

Laut einem Bericht auf t3n gibt es eine Schwere Sicherheitslücke in Drupal die auch schon ausgenutzt wird. Betroffen sind ...

Sicherheit

MikroTik-Router patchen, Schwachstelle wird ausgenutzt

Information von kgborn vor 1 TagSicherheit

Am 23. April 2018 wurde von Mikrotik ein Security Advisory herausgegeben, welches auf eine Schwachstelle im RouterOS hinwies. Mikrotik ...

Windows 10

Microcode-Updates KB4090007, KB4091663, KB4091664, KB4091666 für Windows 10

Information von kgborn vor 1 TagWindows 101 Kommentar

Kurze Information für Administratoren von Windows 10-Systemen, die mit neueren Intel CPUs laufen. Microsoft hat zum 23. April 2018 ...

Heiß diskutierte Inhalte
Ausbildung
Wie gelingt ein guter Einstieg in die FiSi-Ausbildung? (Umschulung)
Frage von SiAnKoAusbildung30 Kommentare

Schönen guten Tag, ich bin SiAnKo und habe seit dem 1.04.2018 eine Umschulung als FiSi angefangen. Ich möchte natürlich ...

Windows Server
Alten DC entfernen
gelöst Frage von smartinoWindows Server27 Kommentare

Hallo zusammen, ich habe hier eine Umgebung übernommen und erstmal einen DCDIAG gemacht. Dabei fällt auf, daß eine ganze ...

Batch & Shell
OU an eine Variable übergeben
gelöst Frage von oesi1989Batch & Shell22 Kommentare

Hallo, ich würde gerne alle OUs an eine Variable übergeben und danach einen Teil per .remove entfernen. Das Anzeigen ...

Batch & Shell
Mit Powershell den Inhalt einer Excel mit einer Text Datei abgleichen
gelöst Frage von Bommi1961Batch & Shell21 Kommentare

Hallo zusammen, ich muss den Inhalt einer Excel Datei (Mappe1) mit dem Daten einer Text Datei abgleichen. Die Daten ...