Batchdatei „If“-Befehl

Batchdatei „If“-Befehl

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 Barkerund 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 getdurch 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 ftpAufrufe: 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 ftpAufruf 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 --timestampingOption 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 ftpist 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 verwendenrsyncauch.
Wenn es fehlschlägt, versuchen Sie es mit scp -poder sftpnutzen Sie den SSH-Schlüssel [4] .

Wenn Sie bei bleiben möchten ftp, verwenden Sie die mgetOption, die alle Dateien blind aus dem Verzeichnis kopiert, stellen Sie den Modus der Dateiübertragung jedoch vorab mit dem binaryBefehl 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 -Nbesteht 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 --helpoder 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.


verwandte Informationen