01. oktober 2008 - 11:00Der er
8 kommentarer og 1 løsning
Læs filer og indhold (FOR) skriv batch ud fra indhold
Hejsa,
Jeg har følgende problemstilling: Jeg skal læse en række *.con filer på en FTP, som hver indeholder navnet på en tilsvarende *.txt fil. Jeg skal først hente con filer, og derefter hente de tilhørende txt filer. Jeg har batch download af alle con filer på plads (ncftpget). Men nu skal jeg læse alle disse filer, og opbygge min download.bat til at hente filerne en for en. Det skal siges at der i confilerne er 1 linje med newline i slutningen. Jeg bruger en FOR løkke, men det spiller ikke helt. :(
Mit batch script, som ikke virker:
set FTPCMDstart=ncftpget.exe -f site.txt -DD /out/ set FTPCMDslut=C:\Mindownloadsti\
for %%f in (*.con) do (
set Filnavn=%%f set Linje=!FTPCMDstart!%Filnavn%!FTPCMDslut! type %Linje% >> C:\download.bat )
Kanon hurtig respons, thumbs up :) Din if sætning gav fejl ved at den ikke synes så godt om %%g="", men jeg hev den ud og det lader til at spille helt perfekt. Det med de !! tegn i stedet for %% må være en fejl jeg har læst mig til somewhere. Så jeg endte i: @echo off set FTPCMDstart=ncftpget.exe -f site.txt -DD /out/ set FTPCMDslut=C:\Mindownloadsti\
for %%f in (*.con) do for /f %%g in (%%f) do echo %FTPCMDstart%%%g %FTPCMDslut% >> C:\download.bat
Var det fordi jeg havde en TYPE i stedet for echo mit fuckede up, eller kunne man også have brugt type?
type gør det at den tager et filnavn og skriver indholdet af den fil ud - så det vil selvfølgelig ikke gå, fordi du har jo sat alt muligt før og efter filnavnet.
echo er derfor det du skal bruge, men du skal jo lige have fat på indholdet - derfor den ekstra for.
!variabelnavn! behøver ikke være en fejl. Gå ud i kommandoprompten og skriv help set - der kan du læse at ! aktiverer forsinket udvidelse i stedet for øjeblikkelig udvidelse som % gør (dvs. at %variabel% erstattes så snart det er muligt. I denne situation gør det dog ingen forskel, fordi du ikke redigerer FTPCMDstart og FTPCMDslut efter du har sat dem.
Lige endnu et Q, jeg kan se at det ikke er helt optimalt at lave x antal ftp login/logoff. Derfor har jeg undersøgt at jeg godt kan putte alle mine filer i samme login, der skal bare være mellemrum imellem filerne. Derfor skal jeg have en enkelt variabel sat med at der læses i filerne. Noget alá: set sti=/out/ set "mellemrum= " set filer= for %%f in (*.con) do for /f %%g in (%%f) do set filer=%filer%%mellemrum%%sti%%%g
Meningen er altså jeg vil have min %filer% til at indeholde /out/fil1.txt /out/fil2.txt ...
Netop her er den forsinkede indsættelse nyttig, og der er da også et eksempel stort set magen til dette i HELP SET:
set sti=/out/ set filer= for %%f in (*.con) do for /f %%g in (%%f) do set filer=!filer! %sti%%%g echo %FTPCMDstart% !filer! %FTPCMDslut% > download.bat
Bemærk at jeg ikke lige kender din FTP-klient, så det er muligt at du eks. skal have -DD på for hver enkelt fil.
Åh ja - den del havde jeg ikke lige tænkt over at man jo skal gøre *-)
Det er i øvrigt af hensyn til bagudkompatibilitet at det er nødvendigt.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.