Windows parancssori FTP

Default book

Sokan nem tudják, de a Windowsban létezik egy parancssori FTP kliens, ami jó szolgálatot tehet, ha szükség van egy automatikus backup szolgáltatás beállítására.

Ha a megnyitjuk a parancssort és beírjuk az alábbi parancsot kapunk egy help-et.

C:\>ftp --help

A help paramétereit részletesen leírom a cikk végén.

Ha csak annyit írunk, ahogy

C:\>ftp

akkor interaktív módba kerülünk és megváltozik a prompt erre:

ftp>

és itt is kiadhatjuk az ftp parancsokat.

A legfontosabb paraméter a mi céljaink szempontjából a -s:fájlnév paraméter, ugyanis ennek segítségével automatizálhatjuk az FTP működését. A parancs segítségével a fájlban felsorolt parancsokat szépen egyesével végrehajtja majd a program automatikusan. Egy sorban egy parancs lehet. Ha nem értelmes a parancs, akkor a parancsot átlépi az FTP kliens. Az időzítésről gondoskodik a Windows feladatütemezője.

Az alábbiakban egy példát mutatok meg, amikor egy adott távoli könyvtárból az FTP szerverről letöltünk fájlokat a helyi gépre:

Írunk egy batch fájlt, aminek a tartalma az alábbi:

letolt.cmd

ftp -n -d -s:command.txt
Az -d paraméter elhagyható, ha már belőttük a kapcsolatot.

Az alábbi command segítségével. Belépünk a távoli szerverre (open), elküldjük a usernevet és a jelszót (user), átállítjuk a klienst passzív kapcsolatra (quote pasv), bináris adatletöltést állítunk be (type), A helyi gépen átállítjuk a könyvtárat a célkönyvtárra (lcd), a távoli gépen átállítjuk az adatkönyvtárra az aktuális könyvtárat (cd), letöltjük az ott található összes fájlokat (mget) és végül kilépünk az ftp szerverről (quit vagy bye). Mivel az mget parancs alapértelmezésként megáll minden fájl letöltése előtt, ezért ezt a tulajdonságát kikapcsoljuk (prompt off).

open www.tesztszerver.hu
user teszt tesztjelszó
quote pasv
type binary
lcd c:\target
cd /adatok
prompt off
mget *.*
quit

Hogyan lehet ezt automatizálni, hogy minden alkalommal máshová töltse a fájlokat? Ez egy kicsit trükkös dolog, ugyanis az ftp parancsok listájában nem lehet programozási logika, de a windows parancsfile-okkal ezt meg lehet csinálni. Az alapgondolat az, hogy egy batch fájl segítségével futtatáskor legeneráljuk a megfelelő ftp parancsfájlt, ami aztán elvégzi a megfelelő lépéseket. Ilyenkor célszerű minél több paramétert átvinni a batch programokba. Az alábbi példában dátum szerint töltjük le a fájlokat mindig a dátumnak megfelelő könyvtárba:

letoltes.cmd

set TODAY=%date:~0,10%
echo open www.tesztszerver.hu >command.txt
echo user tesztuser jelszó >>command.txt
echo quote pasv >>command.txt
echo type binary >>command.txt
echo cd /adatok >>command.txt
echo lcd c:\backup\%TODAY% >>command.txt
echo prompt off >>command.txt
echo mget *.* >>command.txt
echo quit >>command.txt
ftp -n -d -s:command.txt www.tesztszerver.com

A harmadik példában egy szerverre akarom feltölteni a fájlokat egy helyi könyvtárból egy olyan könyvtárba, amelynek a neve a mai dátum. Csak azokat a fájlokat akarom feltölteni, amelyek az aktuális hónap elseje után változtak. Ehhez használhatjuk a FORFILES batch parancsot Windows 2008 szerver, Vista és Windows 7 esetén, aminek leírása itt található.

feltoltes.cmd

set TODAY=%date:~0,10%
echo open www.tesztszerver.hu >command.txt
echo user tesztuser jelszó >>command.txt
echo quote pasv >>command.txt
echo type binary >>command.txt
echo cd /backup >>command.txt
echo mkdir %TODAY%
echo cd %TODAY% >>command.txt
echo lcd c:\adatok >>command.txt
echo prompt off >>command.txt
forfiles /D %date:~0,8%01 /C "cmd /c echo put @file >>command.txt"
echo quit >>command.txt
ftp -n -d -s:command.txt

Az alábbi példában az FTP parancs paraméterezését találhatjátok, lejjebb pedig egy linket, hogy az FTP-n belül milyen ftp parancsok léteznek

FTP [-v] [-d] [-i] [-n] [-g] [-s:fájlnév] [-a] [-A] [-x:küld?puffer]
    [-r:fogadópuffer] [-b:aszinkron_pufferek] [-w:pufferméret] [állomás]

-v              letiltja a távoli kiszolgáló válaszainak megjelenítését.
-n              letiltja az Első csatlakozáskor történő automatikus bejelentkezést.
-i              Többszörös fájlátvitel során kikapcsolja az interaktív üzeneteket.
-d              Engedélyezi a hibakeresést.
-g              letiltja a fájlnév-helyettesítést (lásd GLOB parancs).
-s:fájlnév      Megadja az FTP-parancsokat tartalmazó szövegfájlt. Az FTP indítása után a parancsok automatikusan futnak.
-a              tetszőleges helyi kapcsolat használata adatkapcsolat létrehozásakor.
-A              Névtelen bejelentkezés.
-x:küld?puffer  Felülírja az SO_SNDBUF alapértelmezett 8192-es méretét.
-r:fogadópuffer Felülírja az SO_RCVBUF alapértelmezett 8192-es méretét.
-b:aszinkron_pufferek Felülírja az aszinkron pufferek alapértelmezett számát (3)
-w:ablakméret   Felülírja az átviteli puffer alapértelmezett 65535-ös méretét.
állomás         Megadja annak a távoli állomásnak a nevét vagy IP-címét, amelyhez csatlakozni kíván

Az FTP parancsban használható parancsok listája itt található: http://www.nsftools.com/tips/MSFTP.htm