CMD/BAT - problem z wykonaniem ELSE w pętli


(XOR) #1

Mam problem ze skryptem .bat, którego zadaniem jest sprawdzanie czy na komputerze zmapowana jest ścieżka sieciowa (litera dysku nieznana).

 

Przykładowa ścieżka

\serwer\folder_komputer

 

W tym celu stworzyłem pętlę for , która analizuje zmapowane ścieżki w poszukiwaniu ciągu znaków. W tym wypadku " _komputer".

**_for /f "tokens=*" %%A in ('net use ^| find "_komputer') do (
if  exist %%A (
    echo Istnieje_**

**   ) ****_else  (
   echo Nie istnieje
    )_**

)

 

Problem w tym, że IF działa poprawnie tylko w przypadku, gdy ścieżka \serwer\folder_komputer  faktycznie jest zmapowana i komenda pętli for ( net use^| find ) ją znajduje. Wtedy wyświetla sie informacja "Istnieje". Nie rozumiem czemu w przypadku, gdy ścieżka nie istnieje na liście dysków i polecenie ( net use^| find ) jej nie znajduje, komenda ELSE nie wyświetla informacji "Nie istnieje" lecz pustą linię. Dlaczego tak się dzieje?

 


(bachus) #2

Pewnie nie wyskakuje poza exist; da radę po literze dysku? By było dużo prościej…


(XOR) #3

Niestety nie, bo literka może być różna. Tak bym mógł zrobić np. “if exist Z:” i tyle. Nie rozumiem czemu potrafi przetworzyć pierwszego “ifa” bez problemu, a “elsa” już nie. Np konstrukcja if/else w przypadku sprzawdzania istnienia folderu działa bez problemu.


(Fizyda) #4

Nie jestem pewny, ale wydaje mi się, że sam pomysł na program - logika jest zła. Dodatkowo wygląda to tak jakby w ogóle pętla była źle napisana. Nie znam się na skryptach bat’owych, ale zaproponowałbym modyfikację tego skryptu. Obecnie wygląda to tak jakby pętla iterowała tylko po znalezionych lokalizacjach. Czyli to co jest w pętli wykonuje się tylko jeśli w ścieżce dostępu do dysku znajdowała się szukana fraza, czyli pętla nie jest potrzebna tak naprawdę, chyba że fraza jest ogólna i może wystąpić potem w wariantach np: _komputer01, _komputer02 lub _komputer_cos i też je sprawdzić.

 

Na podstawie tego co jest i tego jak działa proponuję wprowadzić dodatkową zmienną bool przed pętlą dać jej wartość domyślną na false i w pętli zamiast if’a ustawić ją na true. Ifa zrobić za pętlą i sprawdzać czy dodana zmienna jest true czy też nie.

 

Ale wydaje mi się że to będzie przerost formy nad treścią bo pętla raczej nie jest potrzebna. Tego jednak pewien nie jestem bo w ogóle składnia jest mi do niczego nie podobna.