dwa podstawowe problemy:
Oświadczenie związek musi być parenthesised. W nawiasach, zmiana wartości zmiennej NIE będzie widoczna, BEZ wykonania SETLOCAL ENABLEDELAYEDEXPANSION
- i nawet wtedy musisz użyć! Var! Nie% var%
Więc:
SETLOCAL ENABLEDELAYEDEXPANSION
if exist "c:\folder1" (
set Folder1=1
echo !Folder1!
goto install
) else if exist "c:\folder2" (
set Folder2=1
echo !Folder2!
goto Install
) else goto Install
:Install
lub korzystnie
@ECHO off
if exist "c:\folder1" (
set Folder1=1
goto install
) else if exist "c:\folder2" (
set Folder2=1
goto Install
) else goto Install
:Install
SET folder
Albo jeszcze prościej
@ECHO off
if exist "c:\folder1" set Folder1=1&goto install
if exist "c:\folder2" set Folder2=1&goto Install
:Install
SET folder
Test:
@ECHO OFF
setlocal
SET "folder1="
SET "folder2="
ECHO.----------No folders
DIR /b /ad c:\folder*
CALL :test
ECHO.----------Folder 1 only
MD c:\folder1
DIR /b /ad c:\folder*
CALL :test
ECHO.----------Folder 2 only
RD c:\folder1
MD c:\folder2
DIR /b /ad c:\folder*
CALL :test
ECHO.----------Both
MD c:\folder1
DIR /b /ad c:\folder*
CALL :test
RD c:\folder1
RD c:\folder2
GOTO :eof
:test
if exist "c:\folder1" set Folder1=1&goto install
if exist "c:\folder2" set Folder2=1&goto Install
:Install
SET folder
SET "folder1="
SET "folder2="
GOTO :eof
Ten test tworzy i usuwa dwa katalogi, o których mowa.
Oto wynik:
----------No folders
----------Folder 1 only
folder1
Folder1=1
----------Folder 2 only
folder2
Folder2=1
----------Both
folder1
folder2
Folder1=1
Zauważ, że
SET "folder1="
SET "folder2="
który jest wykonywany zarówno na początku jak i po każdym raporcie zapewnia, że zmienne środowiskowe w pytaniu są usuwane ze środowiska uniemożliwiają kod podający fałszywe wyniki na nieaktualnych informacjach.
Ten system komentowania jest do niczego (chyba że nie wiem, jak korzystać z tego systemu komentowania). Peter, próbowałem twojego prostego rozwiązania, ale zawsze ustawiał Folder1 na równe 1, nawet jeśli C: \ Folder1 nie istniał. – Brian
Najprawdopodobniej zmienne zostały ustawione przed poprzednim uruchomieniem. Zmienne muszą być wyraźnie ustawione na nic, aby usunąć je ze środowiska. Właśnie dlatego większość programów wsadowych ma tutaj 'SETLOCAL' natychmiast po' @echo off'. W przypadku 'setlocal' wszelkie zmiany środowiska są cofane, gdy kończy się procedura. – Magoo
OK, nie robiłem SET "folder1 =", aby wyzerować wcześniej, ani SETLOCAL. Więc może używałem nieaktualnych danych. Pozwól mi spróbować jeszcze raz. – Brian