Lista winnt@man.lodz.pl
[Lista archiwów] [Inne Listy]

Re: [WINNT] Windows Batch: substring?

To: winnt@man.lodz.pl
Subject: Re: [WINNT] Windows Batch: substring?
From: "radekp@konto.pl" <radekp@konto.pl>
Date: Tue, 02 Apr 2024 16:04:02 +0200
Tue, 2 Apr 2024 15:59:12 +0200, w <uuh2vg$e9d$1$grzegorz@news.chmurka.net>,
"Grzegorz Niemirowski" <grzegorz@grzegorz.net> napisał(-a):

> radekp@konto.pl <radekp@konto.pl> napisał(a):
> > Czy to powinno działać czy zły poradnik czytam?
> > W list.txt są ścieżki do plików typu:
> > c:\aaa\plik1.txt
> > c:\aaa\plik2.pdf
> > (itd.)
> > W batchu chcę się dorwać do rozszerzenia pliku (txt, pdf itd.)
> > for /F "delims=;" %%F in (list.txt) do (
> >     set str = %%F
> >     set ext = %str:~-3%
> >     echo %ext%
> >     (
> >         echo "EXT: %ext% -- Plik %%F"
> >     ) >>output.avs
> > )
> > zwraca mi:
> > "EXT: ~-3 -- c:\aaa\plik1.txt"
> > "EXT: ~-3 -- c:\aaa\plik2.pdf"
> > Oczywiście zamiast ~-3 powinno być rozszerzenie. A nie jest. Why?
> 
> Ponieważ CMD jest dziwny i powinno się stosować coś normalnego.
> Dłuższe wyjaśnienie: zmienne w CMD są obliczane od razu po uruchomieniu 
> skryptu a nie jak wykonanie dojdzie do danej linijki. Jak skrypt startuje, 
> to %%F jest puste, więc str i ext też będą puste. Jak koniecznie chcesz CMD, 
> to zainteresuj się EnableDelayedExpansion. Ponadto CMD ma specjalne funkcje 
> do wyciągania rozszerzeń, nie trzeba odliczać 3 znaków od końca. Zobacz 

Tak, już wygooglałem. Nic to nie dało, ale przypomniałem sobie o funkcjach
rozszerzeń itp. i to działa.

Droga przez mękę...


<Pop. w Wątku] Aktualny Wątek [Nast. w Wątku>