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 18:19:03 +0200
Tue, 2 Apr 2024 17:30:52 +0200, w <uuh8bc$jc3$1$grzegorz@news.chmurka.net>,
"Grzegorz Niemirowski" <grzegorz@grzegorz.net> napisał(-a):

> radekp@konto.pl <radekp@konto.pl> napisał(a):
> > I jeszcze jedno:
> > To działa:
> > set year=%date:~6,4%
> > set month=%date:~3,2%
> > set day=%date:~0,2%
> > set today="%year%-%month%-%day%"
> > echo %date% %today%
> > I mam to co oczekiwałem.
> > Natomiast tutaj:
> > for /F "delims=;" %%F in (list.txt) do (
> >     set fn=%%F
> >     if %fn% == %today% (
> > fn zawsze pozostaje pustym ciągiem. Why?
> > A potrzebuję z niej wyciągnąć 10 pierwszych znaków
> 
> Pisałem w poprzednim poście. CMD próbuje rozwiązywać wszystkie zmienne od 
> razu, zanim w ogóle zacznie wykonywać skrypt. Na początku wartość %%F jest 
> pusta, więc fn też będzie puste. Gdy skrypt wejdzie do pętli, wartość fn nie 
> jest zmieniana. To jest zupełnie inaczej niż w innych językach 
> programowania. Dlatego wspomniałem o EnableDelayedExpansion.

Stosuję to Delayed.

Zrobiłem tak:

set fn=%%~nF
for /F "delims=;" %%F in (list.txt) do (
    if %fn% == %today% (
   ...
)

działa.
Tylko za chiny nie mogę teraz wyodrębnić fragmentu %fn% tak jak przy:
set day=%date:~0,2%

Wprowadzenie %fn:~0,9% zamiast %fn% cały czas daje pełny ciąg.


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