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: "Grzegorz Niemirowski" <grzegorz@grzegorz.net>
Date: Tue, 2 Apr 2024 15:59:12 +0200
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 tabelki na stronie https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-xp/bb490909(v=technet.10)?redirectedfrom=MSDN

--
Grzegorz Niemirowski
https://www.grzegorz.net/

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