2012-12-04 6 views
32

setlocalはどのようにバッチファイルで使用しますか?私はスクリプトを学んでいるだけで、非常に簡単な言葉で私に説明したいと思います。バッチファイルでSETLOCALをどのように使用しますか?

私はスクリプトを停止し、< was unexpected at this timeと言いますが、スクリプト内にsetlocal文を持たないことが関係している可能性があります。

答えて

21

最初の行をSETLOCALにします。

rem *******Begin Comment************** 
rem This program starts the superapp batch program on the network, 
rem directs the output to a file, and displays the file 
rem in Notepad. 
rem *******End Comment************** 
@echo off 
setlocal 
path=g:\programs\superapp;%path% 
call superapp>c:\superapp.out 
endlocal 
start notepad c:\superapp.out 

SETLOCALの最も頻繁に使用すると、コマンド拡張機能をオンにすると、変数の遅延拡張を可能にすることです:この例は、下記リンク先の記事からですSETLOCAL詳細については

SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION 

Command Line Referenceを見ますMicrosoft TechNet

Setlocal

+2

...出力が何であるかを推測あなたが与えることができSET/Pコマンドは、変数の値を修正するまで、あなたは「遅延」変数値の拡張に必要私はそれがどのように動作するかの例ですか?どのように、なぜそれを使用するのですか? –

+9

リンクされたサイトの最初のセンテンスは、「バッチファイル内の環境変数のローカライゼーションを開始します。ローカライゼーションは、一致するendlocalコマンドが見つかるか、バッチファイルの最後に到達するまで続きます。」つまり、バッチファイル内にしか見えない環境変数(通常はグローバル)を設定し、 'ENDLOCAL'呼び出しが実行されたとき、またはバッチファイルが終了したときにそれらを自動的に消去することができます。 –

+0

はい、これは素晴らしい例です。何かを 'PATH'変数に追加する必要があるが、スクリプトを何度も実行する必要がある場合は、例のようにすることができます。また、スクリプトの後に環境をクリーンアップする必要もありません。 IOWでは 'SET'を実行する前に'setlocal'を呼び出すことで、WindowsシェルスクリプトをBashスクリプト(親シェルの環境を変更できない)のように動作させます。 –

9

への直接リンクにこのコードとします(それが実行される前に)%オプション%値は、IFコマンドが解析された一度だけ交換されbecase

If "%getOption%" equ "yes" (
    set /P option=Enter option: 
    echo Option read: %option% 
) 

前のコードは動作しません。この

setlocal EnableDelayedExpansion 
If "%getOption%" equ "yes" (
    set /P option=Enter option: 
    echo Option read: !option! 
) 

チェック:

set var=Before 
set var=After & echo Normal: %var% Delayed: !var! 

+1

は "before"という質問に対する答えですか? –

+2

これは 'Normal:Before Delayed:After'ですが、Delayed Variable ExpansionはEnabledにする必要があります。 'SET /?'とタイプし、 "最後に遅延環境変数拡張のサポートが追加されました。"に... – Aacini

関連する問題