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

Per Batch Dateien in einem gewissen Ordner je nach Dateiendung über FTP archivieren

Frage Entwicklung Batch & Shell

Mitglied: LittleFlame

LittleFlame (Level 1) - Jetzt verbinden

18.07.2009, aktualisiert 21:06 Uhr, 6008 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 ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Per Batch Dateien in einen Ordner - ext. Festplatte übertragen (2)

Frage von tocksick zum Thema Batch & Shell ...

C und C++
Dateien in Ordner kopieren anhand vom Teil eines Dateinamen (22)

Frage von onlyforu8373 zum Thema C und C ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...