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/
|