zwei grundlegende Probleme:
Verbindung Anweisung muss parenthesised werden. In Klammern ist das Ändern eines Variablenwerts NICHT sichtbar, AUSSER Sie haben SETLOCAL ENABLEDELAYEDEXPANSION
ausgeführt - und selbst dann müssten Sie! Var! Also nicht% 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
oder vorzugsweise
@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
Oder noch einfacher
@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
Dieser Test erstellt und löscht die beiden betroffenen Verzeichnisse.
Hier ist das Ergebnis:
----------No folders
----------Folder 1 only
folder1
Folder1=1
----------Folder 2 only
folder2
Folder2=1
----------Both
folder1
folder2
Folder1=1
Beachten Sie, dass
SET "folder1="
SET "folder2="
, die sowohl am Anfang und nach jedem Bericht ausgeführt wird, stellt sicher, dass die Umgebungsvariablen in Frage aus der Umgebung entfernt werden, um zu verhindern Code, der bei veralteten Informationen falsche Ergebnisse liefert.
Dieses Kommentar-System saugt (Es sei denn, ich weiß nicht, wie Sie dieses Kommentar-System verwenden). Peter, ich habe deine einfache Lösung ausprobiert, aber es würde immer Folder1 auf 1 setzen, auch wenn C: \ Folder1 nicht existiert. – Brian
Die Variablen wurden aller Wahrscheinlichkeit nach von einem vorherigen Lauf gesetzt. Variablen müssen explizit auf nichts gesetzt werden, um sie aus der Umgebung zu entfernen. Deshalb haben die meisten Batch-Programme sofort nach dem @echo off einen 'SETLOCAL'. Mit 'setlocal' werden alle Umgebungsänderungen rückgängig gemacht, wenn die Routine endet. – Magoo
OK, ich habe nicht das SET "folder1 =" gemacht, um vorher Null, noch das SETLOCAL. Vielleicht benutzte ich also veraltete Daten. Lass mich das nochmal versuchen. – Brian