Avatar billede up2nogood Nybegynder
01. oktober 2008 - 11:00 Der 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
)
Avatar billede pidgeot Nybegynder
01. oktober 2008 - 11:14 #1
@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 if not %%g="" echo !FTPCMDstart!%%g !FTPCMDslut! >> C:\download.bat

if'en er ikke nødvendig iflg. en lille test jeg lavede - en newline til sidst gjorde ikke nogen forskel - men jeg tog den med for en god ordens skyld.
Avatar billede up2nogood Nybegynder
01. oktober 2008 - 11:45 #2
Hej igen,

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?
Avatar billede up2nogood Nybegynder
01. oktober 2008 - 11:45 #3
og smid et svar, så skal du få dine points :)
Avatar billede pidgeot Nybegynder
01. oktober 2008 - 12:09 #4
Det var en skrivefejl - skulle have været == :)

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.
Avatar billede up2nogood Nybegynder
01. oktober 2008 - 14:09 #5
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  ...
Avatar billede pidgeot Nybegynder
01. oktober 2008 - 14:19 #6
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.
Avatar billede up2nogood Nybegynder
01. oktober 2008 - 14:46 #7
Mit output bliver:
ncftpget.exe -f site.txt -DD /out/ !filer! /out/fil4.txt  C:\Mindownloadsti\

Det ser altså stadig ud til at den !variabel! ikke spiller.
Men jeg kan godt se eksemplet svarer fint til det du skriver. Strange...
Avatar billede up2nogood Nybegynder
01. oktober 2008 - 14:57 #8
Jeg manglede lige:
setlocal enabledelayedexpansion
Lader til at med lidt skruning får jeg det til at spille til sidst...
Avatar billede pidgeot Nybegynder
01. oktober 2008 - 15:06 #9
Å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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester