5

OK、いくつかのネストされた IF EXIST ステートメントを実行して、いくつかのフォルダーの存在を確認しようとしています。最初のフォルダーが存在する場合は、Folder1 を 1 に設定し、インストールに進みます。Folder2 と同じです。どちらのフォルダーも存在しない場合は、スキップしてインストールします。

ただし、Folder1 が存在しない場合でも、これにより %Folder1% が 1 に設定されます。

ありがとう!

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
4

3 に答える 3

11

2 つの基本的な問題:

複合ステートメントは括弧で囲む必要があります。括弧内では、変数値の変更は、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

このテストでは、問題の 2 つのディレクトリを作成および削除します。

結果は次のとおりです。

----------No folders
----------Folder 1 only
folder1
Folder1=1
----------Folder 2 only
folder2
Folder2=1
----------Both
folder1
folder2
Folder1=1

ご了承ください

    SET "folder1="
    SET "folder2="

これは、各レポートの開始時と後の両方で実行され、問題の環境変数が環境から削除され、コードが古い情報に対して誤った結果を出すのを防ぎます。

于 2013-04-01T17:09:38.210 に答える
1
if exist "c:\folder1" (
        set Folder1=1
        echo %Folder1%
        goto install
) if exist "c:\folder2" (
        set Folder2=1
        echo %Folder2%
        goto Install
) else goto Install 

:Install
于 2013-04-01T17:00:07.850 に答える
0

このコードは、folder1 が存在しない場合は %folder1%=1 を設定せず、この場合は出力を生成しません。Folder1が存在せず、かつFolder2 が存在する場合、%folder2% は 1 に設定されます。それ以外の場合、%folder2% は空です。変数が空の場合、コマンドの後に閉じていない左括弧を付けて、出力を抑制します。echo

@echo off &setlocal
if exist "c:\folder1" set "Folder1=1"
echo(%Folder1%
if not defined Folder1 if exist "c:\folder2" set "Folder2=1"
echo(%Folder2%
goto Install

:Install
endlocal
于 2013-04-01T17:29:59.163 に答える