Если существуют две директории - ничего не делать - PullRequest
3 голосов
/ 03 января 2011

Я играю с командой командного файла IF EXIST, но столкнулся со сценарием. То, что я пытаюсь сделать, это

ЕСЛИ EXIST C: \ Windows \ system32 вызывает batchfile2

ЕСЛИ СУЩЕСТВУЕТ C: \ WINNT \ system32 call batchfile3

Но есть сценарии, в которых обе директории существуют на ПК, если win2k был обновлен до XP вместо новой установки XP. Что я хочу, чтобы он делал, если он обнаруживает обе директории, так это «ничего не делал», так как первые две опции выше уже заботятся о том, что я хочу сделать. Может кто-нибудь сказать мне, как я могу манипулировать этим?

Помимо вышесказанного, я полагаю, что я также могу вызывать подпрограммы в пределах одного и того же пакета, но как я могу создать подпрограмму для завершения скрипта, если он обнаруживает "Windows \ system32" и "WINNT \ system32"?

ЕСЛИ СУЩЕСТВУЕТ C: \ Windows \ system32 перейти к sub1 еще перейти к sub2

: sub1

: sub2

Большое спасибо заранее.

Ответы [ 3 ]

5 голосов
/ 03 января 2011

Я не уверен, когда именно вы хотите, какую опцию выполнить, но вы можете комбинировать переходы и метки столько, сколько хотите.Может быть, немного сложнее, но, по крайней мере, структурировано:

@echo off
IF EXIST C:\Windows\system32 goto windowsfound
:afterwindows
IF EXIST C:\WINNT\system32 goto winntfound
:afterwinnt
goto end

:windowsfound
IF EXIST C:\WINNT\system32 goto bothexist
echo Windows folder found, do something.
call batchfile2
goto afterwindows

:winntfound
echo WINNT folder found, do something.
call batchfile3
goto afterwinnt

:bothexist
echo Both folders already exist.
goto end

:end
echo Exiting.

Я думаю, что было бы возможно проверить оба варианта в одной строке:

@echo off
IF EXIST C:\Windows\system32 IF EXIST C:\WINNT\system32 goto bothfound

IF EXIST C:\Windows\system32 goto windowsfound
IF EXIST C:\WINNT\system32 goto winntfound

:windowsfound
echo Windows folder found, do something.
call batchfile2
goto end

:winntfound
echo WINNT folder found, do something.
call batchfile3
goto end

:bothexist
echo Both folders already exist.
goto end

:end
echo Exiting.
3 голосов
/ 03 января 2011

Один простой способ:

if exist c:\windows\system32 if exist c:\winnt\system32 goto morestuff
if exist c:\windows\system32 call batchfile2
if exist c:\winnt\system32 call batchfile3
:morestuff
...
0 голосов
/ 03 января 2011

вы можете удалить "@ECHO OFF" ... REM - это просто комментарии в файле ... а ECHO - это просто вещи, которые он выводит ... (если вы удалите эхо-сигнал, он покажет все это .. )

по сути, вы можете перейти к разным разделам файла с пометкой goto ... вы просто ссылаетесь на метку goto ... а затем в файле используете colen и имя метки в качестве якоря / target / label. .

@ECHO OFF
REM Check to see if windows\system32 exists.. if so skip to the part 2 section
IF EXIST C:\WINDOWS\system32 goto parttwo

REM if windows\system32 didnt exist, it will check for the other dir...
IF EXIST C:\WINNT\system32 goto partthree


REM if we get to this point.. neither directory existed...  so skip to a message about that
goto neither

:parttwo
echo windows\system32 existed
REM because it was not checked earlier, check to see if the second directroy exists
IF EXIST C:\WINNT\system32 goto end

echo windows\system32 existed, but winnt\system32 does not...
echo do or call whatever for part 3....



goto end



:partthree
echo winnt\system32 existed
echo do or call whatever for part three




goto end



:neither
echo Could not find windows or winnt \system32


:end
echo goodbye

Вы всегда можете обратиться к MS за дополнительной информацией: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/batch.mspx?mfr=true

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...