2012-12-04 2 views
32

Jak korzystać z setlocal w pliku wsadowym? Po prostu uczę się skryptowania i chciałbym, aby wyjaśniono mi to w bardzo prosty sposób.Jak korzystać z SETLOCAL w pliku wsadowym?

Mam skrypt, który zatrzymuje się i mówi < was unexpected at this time może mieć coś wspólnego z brakiem jakichkolwiek instrukcji setlocal w skrypcie.

Odpowiedz

21

Tworzysz pierwszą linię SETLOCAL. Ten przykład jest z połączonej artykułu poniżej:

rem *******Begin Comment************** 
rem This program starts the superapp batch program on the network, 
rem directs the output to a file, and displays the file 
rem in Notepad. 
rem *******End Comment************** 
@echo off 
setlocal 
path=g:\programs\superapp;%path% 
call superapp>c:\superapp.out 
endlocal 
start notepad c:\superapp.out 

Najczęstszym wykorzystanie SETLOCAL jest włączenie rozszerzeń poleceń i umożliwiają opóźnione rozszerzanie zmiennych:

SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION 

Aby uzyskać więcej informacji na SETLOCAL zobaczyć Command Line Reference w Microsoft TechNet.

Link bezpośredni do Setlocal

+2

możesz dać ja przykład tego, jak to działa? Jak i dlaczego z niego korzystać? –

+9

Myślę, że pierwsze zdanie połączonej witryny robi to, co jest "Uruchamia lokalizację zmiennych środowiskowych w pliku wsadowym. Lokalizacja jest kontynuowana, dopóki nie zostanie znaleziona zgodna komenda endlocal lub osiągnięty zostanie koniec pliku wsadowego.". Innymi słowy, pozwala ustawić zmienne środowiskowe (które zazwyczaj są globalne) widoczne tylko wewnątrz pliku wsadowego i automatycznie czyści je, gdy wykonywane jest wywołanie 'ENDLOCAL' lub kończy się plik wsadowy. –

+0

Tak, jest to świetny przykład - jeśli chcesz dodać coś do zmiennej 'PATH', ale skrypt musi być uruchamiany wiele razy, możesz zrobić to jak w przykładzie. Nie musisz też czyścić środowiska po swoim skrypcie. IOW, wywołując 'setlocal' przed' SET' cokolwiek, powoduje, że skrypty powłoki systemu Windows zachowują się jak skrypty Bash (które nie mogą zmienić środowiska powłoki nadrzędnej). –

9

Załóżmy ten kod:

If "%getOption%" equ "yes" (
    set /P option=Enter option: 
    echo Option read: %option% 
) 

Poprzedni kod nie będzie działać becase opcji% wartości% otrzymuje tylko jeden raz, gdy polecenie IF jest analizowana (zanim zostanie wykonana) . Trzeba "opóźnienie" ekspansja zmienna aż komenda SET/P był modyfikowany zmienną wartość:

setlocal EnableDelayedExpansion 
If "%getOption%" equ "yes" (
    set /P option=Enter option: 
    echo Option read: !option! 
) 

Zaznacz to:

set var=Before 
set var=After & echo Normal: %var% Delayed: !var! 

Zgadnij co wyjście jest ...

+1

jest odpowiedzią na pytanie "przed"? –

+2

Jest to "Normalny: Przed Opóźniony: Po", ale Opóźniona zmienna Rozbudowa musi być Włączona, aby to zadziałało. Wpisz 'SET /?' I przeczytaj uważnie "W końcu dodano obsługę opóźnionego rozszerzenia zmiennych środowiskowych." na... – Aacini