две основные проблемы:
должно быть заключено в скобки Составной оператор. В круглых скобках изменение значения переменной НЕ будет видимым, ЕСЛИ вы не выполнили SETLOCAL ENABLEDELAYEDEXPANSION
- и даже тогда вам нужно будет использовать! Var! не% Var%
Итак:
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
Или предпочтительно,
@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
Или еще проще
@ECHO off
if exist "c:\folder1" set Folder1=1&goto install
if exist "c:\folder2" set Folder2=1&goto Install
:Install
SET folder
Тест:
@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
Этот тест создает и удаляет указанные два каталога.
Вот результат:
----------No folders
----------Folder 1 only
folder1
Folder1=1
----------Folder 2 only
folder2
Folder2=1
----------Both
folder1
folder2
Folder1=1
Обратите внимание, что
SET "folder1="
SET "folder2="
который выполнен как в начале и после каждого отчета гарантирует, что переменные среды в вопросе удаляются из окружающей среды, чтобы предотвратить код, дающий ложные результаты по устаревшей информации.
Эта система комментариев отстой (если я не знаю, как использовать эту систему комментариев). Питер, я попробовал ваше простое решение, но всегда устанавливал бы Folder1 равным 1, даже если C: \ Folder1 не существовал. – Brian
По всей вероятности, переменные были SET с помощью предыдущего прогона. Переменные должны быть явно не предназначены для удаления из среды. Вот почему в большинстве пакетных программ есть 'SETLOCAL' сразу после' @echo off'. С помощью 'setlocal' любые изменения среды отменяется, когда заканчивается процедура. – Magoo
ОК, я не делал SET «folder1 =» до нуля, или SETLOCAL. Поэтому, возможно, я использовал устаревшие данные. Позвольте мне попробовать это снова. – Brian