嵌套如果存在于批处理文件语句 [英] Nested If Exist statements in Batch File

查看:106
本文介绍了嵌套如果存在于批处理文件语句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好吧,我试图做嵌套如果一对夫妇EXIST语句来检查了几个文件夹的presense。如果第一个文件夹存在,设置Folder1中等于1,然后跳到安装。同样的,在FOLDER2,然后如果没有文件夹存在就跳过安装。

但即使Folder1中不存在,这仍然设置%Folder1中%至等于1。我在想什么/不会做什么?

谢谢!

 是否存在C:\\文件夹1设置Folder1中= 1
    回声%Folder1中%
    转到安装
否则,如果存在C:\\文件夹2设置FOLDER2 = 1
    回声%FOLDER2%
    转到安装
否则转到安装:安装


解决方案

两个基本问题:

一个复合语句必须parenthesised。
即使如此,你需要使用VAR - 括号内,除非你有执行 SETLOCAL ENABLEDELAYEDEXPANSION 改变一个变量的值将不可见!不VAR%%

所以:

  SETLOCAL ENABLEDELAYEDEXPANSION
如果存在C:\\文件夹1(
        设置Folder1中= 1
        回音!Folder1中!
        转到安装
)否则,如果存在C:\\文件夹2(
        设置FOLDER2 = 1
        回音!FOLDER2!
        转到安装
)否则转到安装:安装

或者preferably,

  @ECHO关闭
如果存在C:\\文件夹1(
        设置Folder1中= 1
        转到安装
)否则,如果存在C:\\文件夹2(
        设置FOLDER2 = 1
        转到安装
)否则转到安装:安装SET文件夹

或者也可以简单

  @ECHO关闭
如果存在C:\\文件夹1设置Folder1中= 1&安培;转到安装
如果存在C:\\文件夹2设置FOLDER2 = 1&安培;转到安装
:安装SET文件夹


测试:

  @ECHO OFF
SETLOCAL
SET文件夹1 =
SET文件夹2 =
ECHO .----------没有文件夹
DIR / B /广告C:\\文件夹*
CALL:测试
只有ECHO .----------文件夹1
MD C:\\文件夹1
DIR / B /广告C:\\文件夹*
CALL:测试
只有ECHO .----------文件夹2
RD C:\\文件夹1
MD C:\\文件夹2
DIR / B /广告C:\\文件夹*
CALL:测试
ECHO .----------两个
MD C:\\文件夹1
DIR / B /广告C:\\文件夹*
CALL:测试
RD C:\\文件夹1
RD C:\\文件夹2GOTO:EOF:测试
如果存在C:\\文件夹1设置Folder1中= 1&安培;转到安装
如果存在C:\\文件夹2设置FOLDER2 = 1&安培;转到安装
:安装SET文件夹
SET文件夹1 =
SET文件夹2 =
GOTO:EOF

此测试创建和删除这两个目录中的问题。

下面是结果:

  ----------没有文件夹
只有----------文件夹1
文件夹1
文件夹1 = 1
只有----------文件夹2
文件夹2
FOLDER2 = 1
- - - - - 都
文件夹1
文件夹2
文件夹1 = 1

注意

 设置文件夹1 =
    SET文件夹2 =

这是双方在开始后的每个报告,确保有问题的环境变量从环境到prevent的code提供的信息陈旧错误的结果中移除。执行

Ok, I'm trying to do a couple nested IF EXIST statements to check for the presense of a couple folders. If the first folder exists, set Folder1 to equal 1, and then skip to Install. Same with the Folder2, and then if neither folder exists just skip to install.

But even when Folder1 doesn't exist, this still sets %Folder1% to equal 1. What am I missing/not doing?

Thanks!

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

解决方案

Two fundamental problems:

A compound statement must be parenthesised. Within parentheses, changing a variable value will NOT be visible UNLESS you have executed a SETLOCAL ENABLEDELAYEDEXPANSION - and even then you'd need to use !var! not %var%

So:

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

Or preferably,

@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

Or even simpler

@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

This test creates and deletes the two directories in question.

Here's the result:

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

Note that

    SET "folder1="
    SET "folder2="

Which is executed both at the start and after each report ensures that the environment variables in question are removed from the environment to prevent the code giving false results on stale information.

这篇关于嵌套如果存在于批处理文件语句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆