
Ich versuche zum ersten Mal, eine Batchdatei zu erstellen. Dabei wird eine Datei heruntergeladen, die einmal pro Woche mit einer neuen ID aktualisiert wird. Dies ist die Batchdatei, die ich bisher erstellt habe -
@echo off
echo open SERVER> temp.txt
echo USERNAME>> temp.txt
echo PWD>> temp.txt
echo cd />> temp.txt
echo cd Events/_PPV_Barker>> temp.txt
echo binary>> temp.txt
echo get Barker*_480i.ts>> temp.txt
ftp -s:temp.txt
del temp.txt
Ich weiß, dass der Dateiname jedes Mal, wenn eine neue Datei auf den Server hochgeladen wird, mit beginnt Barker
und endet 480i.ts
. Ich habe es mit * versucht, wie oben gezeigt, aber es funktioniert nicht. Wie kann ich den if-Befehl verwenden, um jedes Mal eine Datei mit einer eindeutigen ID zu erhalten? Oder gibt es außer dem if-Befehl noch eine andere Möglichkeit?
Jede Hilfe wird geschätzt.
Danke
Keshav
Antwort1
Wenn ich Sie richtig verstehe, gibt es bei jedem Zugriff auf den Server eine neue Datei, aber Sie kennen den genauen Namen nicht. Was ich nicht weiß, ist, ob die Datei nach dem Herunterladen entfernt wird oder ob Sie eine immer größer werdende Anzahl von Dateien haben und die neueste auswählen müssen.
Im einfachsten Fall gibt es nur eine Datei, und hier ist Ihre Lösung fast richtig: Es ist eine einfache Änderung erforderlich, um get
durch zu ersetzen mget
, wenn das Platzhalterzeichen *
funktioniert: -
echo mget Barker*_480i.ts>> temp.txt
Wenn viele Dateien dieser Dateimaske entsprechen, werden bei jedem Zugriff immer mehr Dateien heruntergeladen. Eine schnelle und einfache Lösung besteht darin, die Dateien in Ihrem aktuellen Verzeichnis zu belassen und sie schreibgeschützt zu machen: Sie erhalten zwar viele Fehler, aber die neue Datei wird heruntergeladen und Sie haben nicht den Aufwand, die Dateien zu übertragen, die Sie zuvor erhalten haben.
Wenn Sie vollen Zugriff auf das Remote-Verzeichnis haben, können Sie die heruntergeladene Datei auf dem Remote-Verzeichnis löschen, verschieben oder umbenennen, sodass Sie jedes Mal nur eine Datei haben, die der Dateimaske entspricht.
Wenn Sie keine dieser Aufgaben ausführen können, benötigen Sie zwei ftp
Aufrufe: Der erste ruft eine Verzeichnisliste vom Remote-Remote ab, die Sie dann mit Ihrer vorherigen Remote-Liste vergleichen, sodass Sie die neue Datei identifizieren und einen zweiten ftp
Aufruf zum Abrufen erstellen können. Eine Batchdatei hierfür zu schreiben, ist nicht einfach, aber möglich – ich mache solche Dinge, wenn ich WebCam-Dateien verarbeite.
Antwort2
Wenn Sie bereit sind, Ihr Kennwort und Ihren Benutzernamen in das Skript einzufügen (im Klartext!), sollte es Ihnen nichts ausmachen, diese auch in der Befehlszeile selbst zu verwenden.
Wenn Sie lokale Kopien der alten Dateien nach dem Herunterladen behalten und diese oder ihre Zeitstempel nicht ändern, können Sie die ganze Idee mit der Batchdatei eliminieren, indem Siewget für Windowsund fügen Sie die --timestamping
Option hinzu. Dadurch werden Größe und Zeitstempel lokaler Dateien mit Remotedateien verglichen und Remotedateien nur heruntergeladen, wenn sich eine davon unterscheidet oder die lokale Datei nicht existiert. Als zusätzlicher Vorteil werden alle neuen Dateien heruntergeladen, wenn Sie vorherige Updates verpasst haben, nicht nur die neueste.
Ihre Befehlszeile würde ungefähr so aussehen:
`wget --ftp-user=<user> --ftp-password=<password> --timestamping ftp://example.com/Events/_PPV_Barker/Barker*_480i.ts`
Dies setzt natürlich voraus, dass Sie über die erforderlichen Berechtigungen zur Installation von wget verfügen und die vorherigen Kopien lokal aufbewahren.
Antwort3
Versuchen Sie es mit:
mget
Befehl. Ich habe nachgeschaut und da steht „mehrere Dateien abrufen“.
Antwort4
Andere Programme/Wege
Die Verwendung ftp
ist nicht sicher.
Die sichere Version von FTP heißt ftps
,FTP sicher. Versuchen Sie ftp
, es nach Möglichkeit anstelle von zu verwenden.
Es ist immer eine gute Übung, eigene Skripte zu erstellen, aber es ist besser, die für diesen Zweck erstellten Tools zu verwenden, wenn sie vorhanden sind. Als bequemere Alternativen können Sie verwendenwget
(siehe unten), für das keine andere Remote-Installation eines Servers erforderlich ist.
Da Sie Zugriff auf den Remote-Computer haben, wenn dieser installiert ist, können Sie verwendenrsync
auch.
Wenn es fehlschlägt, versuchen Sie es mit scp -p
oder sftp
nutzen Sie den SSH-Schlüssel [4] .
Wenn Sie bei bleiben möchten ftp
, verwenden Sie die mget
Option, die alle Dateien blind aus dem Verzeichnis kopiert, stellen Sie den Modus der Dateiübertragung jedoch vorab mit dem binary
Befehl auf „Binär“ ein.
Wget
wget
- Der nicht-interaktive Netzwerk-Downloader [1,2] . Sie können Folgendes verwenden:
wget -S -N "ftp://YourSite/Events/_PPV_Barker/Barker*_480i.ts"
Die Option -N
besteht darin, Zeitstempel beizubehalten und nur Dateien herunterzuladen, die neuer als die lokalen sind.
Das Anführungszeichen "
kann erforderlich sein, um eine Shell-Erweiterung unter Linux zu vermeiden.
Es funktioniert auch unter Windows (natürlich mit der Windows-Version des Programms).
Eine umfassendereBefehlszeilein Ihrem Fall (und in nur einer Zeile) sollte es heißen:
wget -user=USERNAME -password=PASSWORD
-N "ftp://YourSite/Events/_PPV_Barker/Barker*_480i.ts"
Natürlich ist es klüger, das Passwort nicht in IhrBefehlszeileoder in Skripten ... können Sie stattdessen einfach die selbsterklärende Option verwenden --ask-password
.
Eine bessere Lösung unter Linux besteht darin, die benötigten Informationen in einer Datei mit dem Namen abzulegen .wgetrc
. Der entsprechende Name sollte in der Windows-Dokumentation leicht zu finden sein.
$ cat ~/.wgetrc ftp_user=UsernameOnTheRemoteFTP ftp_password=PasswordOnTheRemoteFTP http_user=UsernameOnTheRemoteHTTP http_password=PasswordOnTheRemoteHTTP
Sie können lesen von wget --help
oder von man wget
:
-N, --timestamping Dateien nicht erneut abrufen, es sei denn, sie sind neuer als die lokale
-S, --server-response Antwort des Druckservers.--user=Benutzer
--password=Passwort
Geben Sie den Benutzernamen user und das Passwort password für den FTP- und HTTP-Dateiabruf an. Diese Parameter können mit den Optionen --ftp-user und --ftp-password für FTP-Verbindungen und den Optionen --http-user und --http-password für HTTP-Verbindungen überschrieben werden.