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

Frage Entwicklung Batch & Shell

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, 6056 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
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 12 StundenLinux1 Kommentar

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 1 TagTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 1 TagSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 1 TagSicherheit9 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Sicherheit
Meltdown und Spectre: Die machen uns alle was vor
Information von FrankSicherheit24 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Ubuntu
Ubuntu - Starter für nicht vertrauenswürdige Anwendungen
Frage von adm2015Ubuntu17 Kommentare

Hallo zusammen, Ich verwende derzeit die Ubuntu Versionen 17.10 bzw. im Test 18.04. Ich habe mehrere .desktop Dateien in ...

Netzwerke
Packet loss bei "InternetLeitungsvollauslastung"
gelöst Frage von Freak-On-SiliconNetzwerke17 Kommentare

Servus; Ja der Titel klingt komisch, is aber so. Wenn die Internetleitung voll ausgelastet ist, hab ich extreme packet ...

Windows 10
Automatische daten kopieren, USB zu USB unter Win10 im Hintergrund
Frage von DerEisigeWindows 1016 Kommentare

Hallo Leute, ich bin auf der Suche nach einem Skript, dass von einem USB Stick automatisch nach dem einstecken ...