[Batch] FTP-script maken, dir-tree kopiëren

Pagina: 1
Acties:
  • 367 views sinds 30-01-2008

  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

Topicstarter
* Moet dit in P&W, WOS of NOS of NTS? Ik heb gekozen voor P&W omdat het toch meer over de code gaat dan over Windows of Netwerken.
* Gezocht bij Google, Technet (MS) en DE Search (hier dus). Wat eruit kwam, daar heb ik wel wat aan gehad, maar hier zit ik vast.

=========================================
Samenvatting:
In een ftp-script geeft deze lijn een foutmelding:
[code]
!dir "C:\pad met spatie\*.*"
[/code]
Hoe is dat op te lossen?
=========================================


Doel: om te cross-backuppen via internet, van een kennis naar mij en andersom.
Het gaat om één directory met veel subdirectories die allemaal ook weer subdirectories hebben. Ik wil dit graag zonder extra software doen, dus alleen met de command-line FTP-client die in Windows XP en Windows 2000 is ingebakken en batch-scripts. Dit om de opstelling zo portable mogelijk te maken zodat anderen 'm ook kunnen gebruiken. Als het even kan, gebruik ik geen extra software, ook niet uit de diverse resource kits, gewoon omdat ik het niet kan betalen en het - zoals gezegd - portable wil houden.

Het probleem is dat je niet automatisch de directory-structuur kan namaken met de FTP in Windows.
code:
1
2
prompt off
mput *

...stuurt alle bestanden uit de hele tree naar de actieve map op de FTP-server, dus reproduceert de tree niet.

Nu had ik al zoiets gemaakt:
code:
1
2
echo >ftpscript.txt
FOR /F "TOKENS=*" %%I IN ('dir c:\bronmap /S /A:A /A:D /B') DO echo "%%I"

...en dan krijg ik een lijst met alle directories in de tree, bijvoorbeeld:
"c:\bronmap\subdir1"
"c:\bronmap\subdir1\subdir2"
"c:\bronmap\subdir2"
"c:\bronmap\subdir2\subdir2\nogeenmap"

Nou kan ik wel alle submappen doorlopen en ze allemaal gaan zitten maken, kijken of er geen error is, enz. enz., maar is er misschien een makkelijker manier? Het probleem hierbij is een beetje dat het incremental backups moeten zijn, dus botweg zippen en opsturen is niet de oplossing.

Dus:
Kan ik een directorystructuur reproduceren op een remote FTP-server met de CLI-FTP-client van Windows 2000 en Windows XP?

[ Voor 33% gewijzigd door CmdrKeen op 22-03-2004 14:23 ]

Bloed, zweet & koffie


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

Topicstarter
Nou, ik ben een stukje verder. Ik ben nu zo ver dat ik een lijst met mappen krijg in een apart bestandje, bv.:"
code:
1
2
3
4
5
6
\butest\ 
\butest\bronmap\ 
\butest\bronmap\subdir1\ 
\butest\doelmap\ 
\butest\doelmap\subdoel\ 
\butest\doelmap\subdoel\testmap\

Het probleem is nu dat er achter elk pad een backslash staat. Weet iemand hoe ik die eraf kan peuteren?

Voor de geïnteresseerden is hier het FTP-script dat mijn batchfile genereert:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
open wodan
backuptester
martin
prompt off
binary
mkdir \butest\ 
mkdir \butest\bronmap\ 
mkdir \butest\bronmap\subdir1\ 
mkdir \butest\doelmap\ 
mkdir \butest\doelmap\subdoel\ 
mkdir \butest\doelmap\subdoel\testmap\ 
lcd \butest\   <------------------------------------ Hier gaat het mis.
mput * \butest\ 
lcd \butest\bronmap\  
mput * \butest\bronmap\ 
lcd \butest\bronmap\subdir1\  
mput * \butest\bronmap\subdir1\ 
lcd \butest\doelmap\  
mput * \butest\doelmap\ 
lcd \butest\doelmap\subdoel\  
mput * \butest\doelmap\subdoel\ 
lcd \butest\doelmap\subdoel\testmap\  
mput * \butest\doelmap\subdoel\testmap\ 
bye


Dit zijn de twee batchfiles:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
:: ftpbu.cmd
@echo off

:: Variabelen definiëren
set FtpServer=wodan
set FtpUsername=backuptester
set FtpPassword=martin
set volume=c:
set rootdir=\butest

%volume%
cd %rootdir%

:: Maak een lijst van alle subdirectories met bestanden erin.

:: Eerst de lijsten van de vorige keer opruimen als die er nog zijn.
if exist dirlist.txt del dirlist.txt
if exist BrokenDirList.txt del BrokenDirList.txt

:: Kijken waar de bestanden zijn
dir *.* /S /B > dirlist.txt

:: Wegschrijven naar file, maar de dubbele eruit halen om tijd te sparen
for /F "delims=*" %%I in (dirlist.txt) do call WriteToBrokenDirList %%~pI

:: FTP-script samenstallen
echo open %FtpServer%>ftpscript.txt
echo %FtpUsername%>> ftpscript.txt
echo %FtpPassword%>> ftpscript.txt
echo prompt off>> ftpscript.txt
echo binary>> ftpscript.txt
for /F "delims=*" %%I in (BrokenDirList.txt) do echo mkdir %%I>> ftpscript.txt
for /F "delims=*" %%I in (BrokenDirList.txt) do echo lcd %%I>> ftpscript.txt | echo mput * %%I>> ftpscript.txt
echo bye>> ftpscript.txt

ftp -s:ftpscript.txt


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
:: WriteToBrokenDirList.cmd
:: Maakt een lijst van unieke paden

:: Als het bestand nog niet bestaat, zitten er ook nog geen dubbele entries in.
if not exist BrokenDirList.txt goto Schrijf

:: Bestaat de map al die we hebben gekregen?
find /c /i "%1" BrokenDirList.txt | find /i "BrokenDirList.txt: 0" > nul
if errorlevel 1 goto Einde

:: Naar de lijst schrijven
:Schrijf
echo %1 >> BrokenDirList.txt

:: Terug naar waar we vandaan kwamen
:Einde

[ Voor 51% gewijzigd door CmdrKeen op 17-03-2004 14:46 ]

Bloed, zweet & koffie


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 23:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Batch scripting hoort in Windows Operated Systems (dan wel Non-Windows Operating Systems, hangt natuurlijk een beetje van het OS af)

PW -> WOS

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

Topicstarter
Hey .oisyn, had meteen ff m'n topictitel aangepast met [XP] ervoor; nou voldoe ik niet aan de lokale policy ;)

Bloed, zweet & koffie


  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Vilenin schreef op 17 maart 2004 @ 08:37:
Nou kan ik wel alle submappen doorlopen en ze allemaal gaan zitten maken, kijken of er geen error is, enz. enz., maar is er misschien een makkelijker manier? Het probleem hierbij is een beetje dat het incremental backups moeten zijn, dus botweg zippen en opsturen is niet de oplossing.
Kan je geen lijst maken van directories die je gemaakt hebt, en het verschil daar tussen versturen? Een lijst van verschillen kan je maken met 'fc' bijvoorbeeld.

  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

Topicstarter
Nee, want ik kan geen "tree" ophalen met deze FTP-client. :/
Bovendien moeten alleen bestanden verstuurd worden die het Archive-attribuut hebben, dus er zullen ook overschrijvingen plaatsvinden. (Wordt eigenlijk DIR /A:A dan.)

[ Voor 68% gewijzigd door CmdrKeen op 17-03-2004 15:20 ]

Bloed, zweet & koffie


  • Sluuut
  • Registratie: Februari 2003
  • Laatst online: 21:23
Misschien begrijp ik je vraag verkeerd, ik heb hem 3x over gelezen maar mijn hersenen zijn niet zoals die van een gemiddelde gymnasium-mer...

Is het de bedoeling dat je alleen de directory structuur copied of juist ook de bestanden? Ik zie wel staan dat je niet met zip wilt gaan werken... Maar je kan toch bijvoorbeeld xcopy gebruiken om alleen dirs te kopieëren, zodat ze ergens anders leeg worden weggeschreven, daar de dirs inzippen met store, dan het zip bestand laten oversturen door middel van een batch file en de ftp server/client, en vervolgens op de andere bak weer via een execute command de boel laten exstracten... Of ik begrijp je vraag verkeerd, excuse moi in dat geval :)

57696520646974206c65657374206973206e657264


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

Topicstarter
Sluuut, ik begrijp niet helemaal wat je bedoelt, maar bedankt voor je antwoord iig :)
- Wat is "store"?
- Er moet maar één server actief betrokken zijn in het backuppen, omdat je niet weet hoe lang het verzenden van de bestanden duurt. Je weet dus niet wanneer "vervolgens" is.

Ik wil alle bestanden met het Archive-attribute (dus die veranderd zijn of nieuw gemaakt) uploaden. Probleem daarbij is dat de map op de FTP-server eerst moet bestaan, wil je er een bestand in kunnen zetten. *Dat* is nu gelukt, alleen zit ik nog met dat ik niet "lcd \root\subdir\" kan doen in de FTP-omgeving van Windows. De laatste backslash moet eraf.

Bloed, zweet & koffie


  • Sluuut
  • Registratie: Februari 2003
  • Laatst online: 21:23
Vilenin schreef op 17 maart 2004 @ 15:35:
Sluuut, ik begrijp niet helemaal wat je bedoelt, maar bedankt voor je antwoord iig :)
- Wat is "store"?
- Er moet maar één server actief betrokken zijn in het backuppen, omdat je niet weet hoe lang het verzenden van de bestanden duurt. Je weet dus niet wanneer "vervolgens" is.

Ik wil alle bestanden met het Archive-attribute (dus die veranderd zijn of nieuw gemaakt) uploaden. Probleem daarbij is dat de map op de FTP-server eerst moet bestaan, wil je er een bestand in kunnen zetten. *Dat* is nu gelukt, alleen zit ik nog met dat ik niet "lcd \root\subdir\" kan doen in de FTP-omgeving van Windows. De laatste backslash moet eraf.
Wat ik hiermee bedoelde, en excuses voor mijn wazige omschrijving in de vorige post... Store bedoel ik mee gewoon inpakken zonder compressie te gebruiken.

Er is ook maar één [ftp]server nodig die het ingepakte bestand ontvangt en daarna een execute commando krijgt van de client, om het te extracten. Denoods execute je vanuit de client een batch file die daar staat (of die je óók erbij upload).

Dit is natuurlijk alleen maar nuttig als je geen bestanden of enorm kleine bestanden hebt in die directory's, anders zit je eeuwen te uploaden terwijl dat veel effectiever kan als je een compare kan uitvoeren.

Overigens heeft FlashFXP een mooie compare functie die bekijkt welke mappen/dirs er al zijn en die automatish overslaat.. je hebt dan ook zoiets als een skiplist die je zelf kan instellen, "don't copy empty dirs" etc.. Misschien kan je daar iets mee :?

PS: Ik snap nog steeds niet precies wat je doel is dat deze scripts, behalve dan dat je nog vastzit met het laatste character wat verwijderd moet worden uit een file. Wellicht kan je hier weer een simpel programmatje voor schrijven, desnoods in QBasic ;)

57696520646974206c65657374206973206e657264


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

Topicstarter
QBasic is compilable! Bedankt voor de tip :) :) (Ow wacht f - die compiler was niet gratis geloof ik.. of wel?)

Mijn doel: webserver A op lokatie A en webserver B op webserver B worden nu elke nacht gebackupped met tapes. Nu zou ik graag automagisch off-site backuppen, dus A stuurt z'n bestanden naar B en v.v.. FTP is het aangewezen protocol. De backups moeten incremental zijn om niet elke nacht 2 x 5GB aan data te hoeven verzenden en ontvangen. De servers moeten elkaar dus synchroniseren via FTP.
Is dat duidelijker? Zo niet, zeg 't maar, dan probeer ik het nog een keer ;)

Ik wil hierbij liever alleen maar native Windows-zut gebruiken, zodat het blijft werken als ik het op andere servers toepas of het aan iemand anders geef. Voor 3rd-party software heb ik geen centen, en dat vind ik ook altijd een beetje jammer, als je een mooi systeem maakt dat drijft op andermans product.

[ Voor 29% gewijzigd door CmdrKeen op 17-03-2004 16:03 ]

Bloed, zweet & koffie


  • Sluuut
  • Registratie: Februari 2003
  • Laatst online: 21:23
Vilenin schreef op 17 maart 2004 @ 16:00:
QBasic is compilable! Bedankt voor de tip :) :) (Ow wacht f - die compiler was niet gratis geloof ik.. of wel?)

Mijn doel: webserver A op lokatie A en webserver B op webserver B worden nu elke nacht gebackupped met tapes. Nu zou ik graag automagisch off-site backuppen, dus A stuurt z'n bestanden naar B en v.v.. FTP is het aangewezen protocol. De backups moeten incremental zijn om niet elke nacht 2 x 5GB aan data te hoeven verzenden en ontvangen. De servers moeten elkaar dus synchroniseren via FTP.
Is dat duidelijker? Zo niet, zeg 't maar, dan probeer ik het nog een keer ;)

Ik wil hierbij liever alleen maar native Windows-zut gebruiken, zodat het blijft werken als ik het op andere servers toepas of het aan iemand anders geef. Voor 3rd-party software heb ik geen centen, en dat vind ik ook altijd een beetje jammer, als je een mooi systeem maakt dat drijft op andermans product.
Ik kan niet ruiken hoeveel data die webserver gebruikt maar je kunt ook bijvoorbeeld alleen .html / .htm en andere extentie files inzippen of sturen, nadat je de directory structuur hebt overgenomen. PKZip van vroeger was toen nog toch gratis, of zaten er toen ook al licentie's aan verbonden? QBasic heeft een compiler die inderdaad standalone files kan maken. Of die geld kost weet ik zo 1-2-3 niet...

Wat je probeerd te bereiken met die script is me nu geheel duidelijk... Ik zou het persoonlijk echter met FlashFXP doen, desnoods vanaf thuis. Daar is FXPén voor uitgevonden he ;) Moeten de andere mensen die er in de toekomst gebruik van willen maken ook maar 30 dollar betalen voor dat proggie... Voor *nix zijn er ook zat FXP-clients. ik weet niet of je er al eens mee hebt gewerkt maar probeer het anders gewoon eens ;)

57696520646974206c65657374206973206e657264


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

Topicstarter
Ow ik heb een scriptable zipmanager, geen probleem (izArch, mooi ding hoor). Inmiddels heb ik QBasic gevonden en een compiler ervoor. Ik ga nu proberen een executable te maken die het vuile werk voor me opknapt.

30 dollars kan ik helaas niet missen, anders had ik wel WS_FTP Pro gekocht (is duurder, maar daar heb ik ervaring mee). Het belangrijkste is echter dat het allemaal scriptable is en zo native mogelijk voor Windows.

Ik ga ff pielen met QB :)

Bloed, zweet & koffie


Verwijderd

Het probleem is nu dat er achter elk pad een backslash staat. Weet iemand hoe ik die eraf kan peuteren?
for /f "tokens=*" %%a in (txtfile) do call :stripline %%a
ren txtfile txtfile.old (of del txtfile ^^)
ren newtxtfile txtfile
del newtxtfile
goto :eof

:stripline
set line=%*
set line=%line:~0,-1%
echo %line%>> newtxtfile
goto :eof

(uit me hoofd het kan zijn dat ik de set fout heb maar set /? geeft de oplossing wel)

edit: oh let wel op dat er geen spaties achteraan staan... anders werkt het nog niet :) (echo %var%>>txtfile ipv echo %var% >>txtfile)

[ Voor 31% gewijzigd door Verwijderd op 17-03-2004 16:26 ]


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

Topicstarter
iis5_rulez rulez :) Dit is precies wat ik zocht, bedankt :)

Nu heb ik nog wel een ander probleem, maar daarover vanavond wel meer. Voorlopig kan ik weer even verder puzzelen. Bedankt, Sluuut ook :)

Bloed, zweet & koffie


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

Topicstarter
Aargh.. zit ik weer vast :\
Het commando MPUT * stuurt alle bestanden in de huidige lokale directory en alle onderliggende lokale directories naar de huidige remote directory :( Grr...
Suggesties zijn welkom, maar ik denk dat ik er maar een ander topic voor open.. Eerst nog ff googlen.

/edit
Ben er ook al veel te lang mee bezig geweest.. Ik zie de simpelste fouten niet meer 8)7 Niet dat het opgelost is nu, maar ik ga er iig ff mee kappen :D Tot zo ver bedankt voor alle hulp :)

[ Voor 26% gewijzigd door CmdrKeen op 17-03-2004 17:40 ]

Bloed, zweet & koffie


  • PommeFritz
  • Registratie: Augustus 2001
  • Laatst online: 24-11-2025

PommeFritz

...geen friet

Moet het perse via FTP? Kan het niet via rsync?

FireFox - neem het web in eigen hand


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

Topicstarter
Is er een Windows-versie van rsync? Google geeft me alleen maar tarballs.. :/

Twee minuten later:
Installing ssh and rsync on a Windows machine: minimalist approach. Ziet er lastig uit, maar ik ga het eens proberen. Wijk ik wel af van mijn idee om geen 3rd party-software te gebruiken, maar het lijkt erop dat rsync speciaal voor mij gemaakt is :)

Hmm, je kan alleen naar een *nix-machine rsyncen..

[ Voor 78% gewijzigd door CmdrKeen op 17-03-2004 21:09 ]

Bloed, zweet & koffie


  • PommeFritz
  • Registratie: Augustus 2001
  • Laatst online: 24-11-2025

PommeFritz

...geen friet

Um... kun je niet gewoon de src en destination argumenten omdraaien.... :?

FireFox - neem het web in eigen hand


  • McMiGHtY
  • Registratie: December 1999
  • Laatst online: 20:03

McMiGHtY

- burp -

Ik zou persoonlijk het script aanpassen dat je "lokaal" vergelijkt welke bestanden je nodig heb, en deze vervolgens in te pakken, met tar en gzip.

Hiervan zijn Windows Ports van, en pakken je bestanden goed in. Daarna heel simpel dit ingepakte bestand FTP'en.

Dus in principe 2 Batchbestanden maken:

1. Uitzoeken welke bestanden je wilt hebben, en deze inpakken.
2. FTP'en

Kan uiteraard ook achterelkaar in 1 batch, maar op deze manier verdeel je het onder.


Van deze batch maak je een scheduled task.

NEW - Het Grote - 2026 Tweakers Social Ride- Topic!


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

Topicstarter
McMiGHtY: Als ik iets inpak, doe ik dat niet met tar en gzip maar met de gratis zipmanager die ik gebruik (IZAr). Dat wil ik optioneel maken omdat ik liever alleen native Windows wil gebruiken. Tar en gzip wil ik liever vermijden omdat dat lastiger is; het gaat me erom dat je in geval van nood heel eenvoudig je backup kan terugzetten zonder dat je software hoeft op te zoeken die niet standaard op elke Windows-machine staat.

PommeFritz: ik ga geen *nix gebruiken. Op zich geen punt, maar ik wil het per sé met tools doen die op elke Windows-machine zijn te vinden. De gedachte hierachter is dat als merk dat ik een backup nodig heb, ik die ook terug kan zetten als ik alleen de meest basic tools ter beschikking heb.

Het is me trouwens gelukt om een script te bakken dat werkt :) Ik ga het vandaag verder bijschaven, voornamelijk flexibeler maken, maar dit is het systeem:
1 - kijk welke bestanden zijn veranderd en welke nieuw zijn (archive-attribute, waar ik nog problemen mee heb onder Samba trouwens!);
2 - kijk in welke directories die bestanden staan;
3 - maak de ontbrekende directories op de FTP-server;
4 - comprimeer de bestanden;
5 - stuur de bestanden naar de FTP-server.

Stap 4 heb ik nog niet gedaan, maar ik wil even kijken of dat wel rendabel is: misschien is de te backuppen server langer bezig met inpakken dan het verzenden van niet-ingepakte bestanden zou duren.

PommeFritz en McMiGHtY, in ieder geval bedankt voor het meedenken. Mocht je meer tips hebben dan blijven die welkom :)

[ Voor 2% gewijzigd door CmdrKeen op 18-03-2004 06:35 . Reden: typo ]

Bloed, zweet & koffie


  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Als het je puur om een backup gaat - waarom gebruik je dan geen ntbackup naar disk? :)

  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

Topicstarter
NTBackup, dat doe ik momenteel op m'n werk, samen met mijn collega. Je backup FTP'en heeft echter twee voordelen:
1. Je bent niet de lul beer als je je laatste tapeje vergeet (ja ik weet dat dat amateuristisch is, maar niemand is perfect) en de boel gaat in de hens.
2. Je kan snel en gemakkelijk bij je backup, waar je ook bent.

Ik wil zowel naar tape als FTP backuppen, hoe meer backups hoe beter. Bovendien heb ik uitgerekend dat incremental backups van kantoor naar huis prima binnen mijn thuis-FUP passen ;)

In de tweede plaats wil ik het script gebruiken voor cross-backup tussen een kennis en mij. We maken beide een hoop digitale foto's - familiefoto's en van de kinderen e.d. - die we niet graag door een hardware failure verloren zouden zien gaan. Persoonlijk kan ik geen backup unit betalen, dus brand ik nu mijn foto's naar CD, maar mijn archief beslaat nu al vier CD's en die dingen hebben ook niet het eeuwige leven.

[ Voor 3% gewijzigd door CmdrKeen op 18-03-2004 08:31 ]

Bloed, zweet & koffie


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

Topicstarter
Verwijderd schreef op 17 maart 2004 @ 16:18:
code:
1
2
3
4
5
6
7
8
9
10
11
for /f "tokens=*" %%a in (txtfile) do call :stripline %%a
ren txtfile txtfile.old (of del txtfile ^^)
ren newtxtfile txtfile
del newtxtfile
goto :eof

:stripline
set line=%*
set line=%line:~0,-1%
echo %line%>> newtxtfile
goto :eof
iis5, kan je misschien toelichten wat je hier precies allemaal doet? Ik speur het hele net af naar degelijke documentatie over batch file scripting, maar er is bitter weinig te vinden. Concrete vragen:
1. Wat is %%a op line 1? <----- lamaar :X
2. Wat is %* op line 8?
3. Wat gebeurt er nou precies op line 9? Daar vat ik helemaal niets van.
4. Het lijkt erop dat je hier een subroutine aanspreekt, terwijl dat eigenlijk in batchfiles niet mogelijk is (gosub bestaat niet (zonder extra software)). Wat zijn hiervoor de regels?

De rest is wel duidelijk. Als je me het zou willen uitleggen, graag, maar zo niet dan ben ik nog steeds blij met de code, want het werkt wél ;)

[ Voor 7% gewijzigd door CmdrKeen op 18-03-2004 10:18 ]

Bloed, zweet & koffie


Verwijderd

Het label :stripline tot goto :eof (end of file) moet je zien als een nieuwe batch.
in regel 1 roepen we de "batch" stripline aan met alle argumenten die op een regel staan in de txt file (tokens=*!).

in de batch stripline zetten we de var line met alle inputvariablen (%1 zou niet werken als er een spatie in zit)
set line=%line:~0,-1% betekent niet meer dan van variabele line begin bij het eerst karakter (~0) en neem alle tekens behalve de laatste (-1). set /? geeft je meer mogelijkheden, maar in het begin zal dat wel een beetje puzzelen zijn.

de goto :eof geeft aan dat dit stukje gedaan is en de for loop haalt het de volgende regel op voor verwerking in de "stripline functie".

zie ook de goto :eof op regel 5. als deze er niet staat wordt de stripline nog een keer doorlopen. Dit betekent direct het einde van de batch!!! (tenzij de for loop ook wordt aangeroepen met een for loop :))

bij grotere batches is dit ook handig om wat structuur in je batch aan te brengen.

je zou dan zoiets krijgen...

:start
call :init
call :verwerk1
if %error%==0 call :verwerk2
call :last
goto :eof

:init
set vars / dirs etc
set error=0
goto :eof

:verwerk1
je eerste akties
if errorlevel 1 set error=1
goto :eof

etc...

edit: als je dit helemaal met een batch wilt doen is het inderdaad een behoorlijke uitdaging. maar ik zou toch gaan zippen en wil je daarvoor een ms tool hebben gebruik dan gewoon compress.exe (is denk ik supporttools of anders reskit).

[ Voor 18% gewijzigd door Verwijderd op 18-03-2004 10:56 ]


  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Vilenin schreef op 18 maart 2004 @ 08:31:
NTBackup, dat doe ik momenteel op m'n werk, samen met mijn collega. Je backup FTP'en heeft echter twee voordelen:
1. Je bent niet de lul beer als je je laatste tapeje vergeet (ja ik weet dat dat amateuristisch is, maar niemand is perfect) en de boel gaat in de hens.
2. Je kan snel en gemakkelijk bij je backup, waar je ook bent.
Je kan via ntbackup ook naar file backupen :) Als je die file nou over FTP'ed, ben je er toch ook? :P

  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

Topicstarter
iis5_rulez, bedankt voor je uitleg :)
elevator, het gaat er nou juist om dat je _direct_ bij je bestanden kan (puntje 2). Als je de backup als één file FTP't, dan moet je 'm ook weer helemaal terug-FTP'en om er een bestand uit te kunnen halen.

Als ik al ga comprimeren, dan is het per bestand.

Bloed, zweet & koffie


Verwijderd

elevator heeft een punt. Als je 1 file moet terugzetten heb je de backup lokaal. heb je een echt probleem dan moet je toch alles overhalen.

  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

Topicstarter
Hmm, daar zit wat in. Zegt-ie nou - net nou ik m'n script draaiende heb 8)7

Bloed, zweet & koffie


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

Topicstarter
Ok, nog iets waar ik tegenaan loop, heeft te maken met lege directories in het path naar de te backuppen directory toe.

Ik heb een string, bijvoorbeeld:

set str=\een\twee\twee en een half\drie\drie en een half\vier\

Hoe kan ik deze splitten op \ ? Dus dat de iteratie alsvolgt is:
een
twee
twee en een half
drie
drie en een half
vier

Ik heb dit geprobeerd met FOR "DELIMS=\" %%a in (%str%) do echo %%a, maar dan krijg ik alleen maar te horen dat het bestand of path niet bestaat. Ook als ik de backslash door een andere known delimiter vervang (set str=%str:\=;%) dan lukt het niet.

Weet jij het, iis5?

Bloed, zweet & koffie


Verwijderd

for /? goed lezen :). als je "for /f .... (iets) do ..." gebruikt dan verondersteld de for loop dat "iets" een bestand is. je delims is dus gewoon goed :)

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

oftewel bij een string "" gebruiken ^^

[ Voor 16% gewijzigd door Verwijderd op 19-03-2004 11:48 ]


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

Topicstarter
Ik heb met dubbele quotes eromheen geprobeerd en met enkele quotes, maar er komt bij mij telkens hetzelfde uit, waarschijnlijk omdat ik fictieve mapnamen gebruik..(?)

Ik gooi het nu over een andere boeg gooien: ik SUBST de te backuppen dir: c:\een\twee blaat\drie\vier en een half\mijn files\ wordt dan T:, zodat je _altijd_ in de root zit.

Ow, en FOR /? heb ik echt _heel_grondig_ gelezen. Pittig stukje literatuur!

[ Voor 11% gewijzigd door CmdrKeen op 19-03-2004 12:01 ]

Bloed, zweet & koffie


Verwijderd

ik denk dat je nog ff tokens moet zetten... (tokens=1-31; dat is max...)

zowieso de echo %%a aan het eind geeft alleen de eerste terug...

wil je de andere ook zien moet je echo %%a %%b %%c %%d etc zetten..

  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

Topicstarter
Dat is wat ik ook van Rob van der Woude geleerd heb inmiddels, en van Mike ;) Er zitten alleen soms directory- en filenames tussen die langer zijn dan dat en meer dan 9 spaties bevatten. Ik hoop trouwens dat ik die een beetje normaal kan FTP'en...

Ik ga nog ff met tokens spelen, bedankt voor de tip :)

Bloed, zweet & koffie


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

Topicstarter
Ok, werkt nu. Met ATTRIB, maar er zijn ergere dingen. Nu nog iets van encryptie, want FTP is nogal doorzichtig.. Zou ik iets met Cipher kunnen? Zit al wat artikeltjes over Cipher te lezen, maar ik heb er geen ervaring mee. Vraag me voornamelijk af of het überhaupt voor dit doeleinde ingezet kan worden.

[ Voor 36% gewijzigd door CmdrKeen op 19-03-2004 15:32 ]

Bloed, zweet & koffie


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

Topicstarter
Goed, volgende struikelblok: encryptie. Cipher heb ik niets aan, dat werkt per directory en niet per bestand.
Ik heb nu twee command-line-encryptors gebruikt: Diamond Lock 2 en Blowfish. Beide programma's zijn goed te gebruiken, ware het niet dat er een raar probleem is met de ingebouwde FTP-client van Windows.

Het FTP'en doe ik alsvolgt:
code:
1
ftp -s:ftpscript.txt

Je kan hiermee het bestand ftpscipt.txt als commando-lijst voor FTP laten gebruiken. Het probleem is de syntax: bijvoorbeeld Blowfish neemt deze input: BFISH /E /P:password /I:"C:\Mijn Documenten\Mijn bestand.txt" /O:"C:\Mijn Documenten\Mijn Ge-encrypte bestand.txt"
(Bfish /E (encrypt) /P (password) /I: inputfile /O: outputfile)
In mijn ftpscript schrijf ik dan:
code:
1
!BFISH /E /P:password /I:"C:\Mijn Documenten\Mijn bestand.txt" /O:"C:\Mijn Documenten\Mijn Ge-encrypte bestand.txt"

Het uitroepteken aan het begin van de line betekent dat het commando erachter in de shell-context moet worden uitgevoerd (zeg maar in DOS). Maar dit commando breekt ALTIJD na de eerste spatie!

Probleem:
Als je de FTP-client van Windows XP een FTP-script laat uitvoeren, wordt een commando dat vooraf wordt gegaan door een uitroepteken afgebroken na de eerste spatie.

Enkele of dubbele quotes e.d. allemaal uiteraard geprobeerd, maar zonder resultaat. Ik heb dus al een andere tool voor encryptie geprobeerd, maar ook als ik niet encryptie doe, maar gewoon kopiëren (!copy "c:\mijn documenten\blaat.txt" "c:\") dan krijg ik de melding "c:\mijn niet gevonden". Het zit dus echt in de command line interpreter van de FTP-client. Google weet hier bar weinig van.. :/

Kan iemand me verder helpen?

Bloed, zweet & koffie


Verwijderd

ik denk dat je beter kan kijken naar sftp oid.

kijk eens op vandyke.com (vshell) en de sftp client van putty (deze is prima te scripten).

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Op verzoek sluiten we dit topic af :)
Pagina: 1

Dit topic is gesloten.