2011-01-03 12 views
3

IF EXISTバッチファイルコマンドを使用していますが、シナリオを実行しました。 Cが存在する場合は、\ WINDOWS \ SYSTEM32コールbatchfile2IF 2つのディレクトリが存在する - 何もしない

: 私は何をしようとしていると、Cを存在する場合

です\ WINNT \ SYSTEM32

をbatchfile3呼び出すしかし、両方のディレクトリがPCに存在するシナリオがありますwin2kが新しいXPの代わりにXPにアップグレードされた場合。上記の最初の2つのオプションがすでに私がしたいことを処理しているので、両方のディレクトリを検出した場合、それは "何もしない"ことです。誰かが私がこれを操作する方法を教えてもらえますか?

上記以外にも、同じバッチ内でサブルーチンを呼び出すことはできますが、 "Windows \ system32"と "WINNT \ system32"の両方を検出すると、スクリプトを終了するサブルーチンを作成する方法はありますか?

IFは、CをEXISTS:\ WINDOWS \ system32に後藤SUB1他のgoto SUB2

:SUB1

:SUB2事前に

感謝します。

+0

ああ「goto」、長時間見ない! – miku

+1

バッチでそれほど多くの選択肢はありません:) – GolezTrol

+0

皆さん、貴重なご意見をいただきありがとうございます。私はあなたの入力のカップルを、これまでにうまくいっている最終的なバッチファイルに組み合わせました。私は1つの問題がある、ホストがダウンしている時がある。私はバッチを複雑にして、実行前にホストにpingテストをしなければならないようにしたくありません。私は、ホストがダウンしたときに、画面上に「このハンドルは無効です」と表示されることを知っています。どのように私はこのパラメータをキャプチャし、 "ホストがダウンしている"私の最終ログファイルにエコーするので、これらの "ダウン"ホストを簡単に追跡できますか? – molecule

答えて

3

どのオプションを実行するのが正しいかはわかりませんが、あなたが望むだけの大きさとラベルを組み合わせることができます。精巧な、多分、しかし少なくとも構造化ビット:

@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. 

は、私は同様に1行の両方をチェックすることも可能であろうと思う:

@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. 
-1

あなたは "@ECHO OFF"を削除することができます... REMはファイル内のコメントだけで、ECHOはそれが出力するものです。(エコーを削除すると、すべてが表示されます。 。)

本質的には、goto文でファイルの別のセクションにジャンプすることができます。gotoラベルを参照するだけです。ファイルの後ろに、コロンとアンカー/ターゲット/ラベル...

@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

3

1つの簡単な方法は、次のとおりです。

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 
... 
関連する問題