2012-12-04 36 views
32

Làm thế nào để bạn sử dụng setlocal trong một tập tin thực thi? Tôi chỉ đang học kịch bản và muốn nó giải thích cho tôi một cách rất đơn giản.Làm thế nào để bạn sử dụng SETLOCAL trong một tập tin thực thi?

Tôi có một tập lệnh dừng và nói < was unexpected at this time có thể có gì đó liên quan đến việc không có bất kỳ câu lệnh setlocal nào trong tập lệnh.

Trả lời

21

Bạn làm cho dòng đầu tiên SETLOCAL. Ví dụ này là từ các bài viết liên kết dưới đây:

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 

Việc sử dụng thường xuyên nhất của SETLOCAL là bật phần mở rộng lệnh và cho phép trì hoãn việc mở rộng của các biến:

SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION 

Để biết thêm về SETLOCAL thấy Command Line Reference tại Microsoft TechNet.

liên kết trực tiếp đến Setlocal

+2

Bạn có thể cho cho tôi một ví dụ về cách nó hoạt động? Làm thế nào và tại sao bạn sẽ sử dụng nó? –

+9

Tôi nghĩ rằng câu đầu tiên của các trang web liên kết nào đó, đó là "Bắt đầu nội địa hóa của các biến môi trường trong một tập tin thực thi. Localization tiếp tục cho đến khi một lệnh endlocal phù hợp đang gặp phải hoặc cuối của tập tin batch đạt được.". Nói cách khác, nó cho phép bạn thiết lập các biến môi trường (thường là toàn cầu) chỉ thấy bên trong tập tin batch của bạn và tự động dọn dẹp chúng khi cuộc gọi 'ENDLOCAL' được thực hiện hoặc tập tin batch kết thúc. –

+0

Vâng, đây là một ví dụ tuyệt vời - nếu bạn cần phải thêm một cái gì đó vào biến 'PATH', nhưng kịch bản cần phải chạy nhiều lần, bạn có thể thực hiện giống như trong ví dụ. Ngoài ra, bạn không cần dọn dẹp môi trường sau tập lệnh của mình. IOW, bằng cách gọi 'setlocal' trước khi bạn' SET' bất cứ điều gì, bạn làm cho các kịch bản shell Windows hoạt động giống như các kịch bản lệnh Bash (mà không thể thay đổi môi trường của shell cha). –

9

Giả mã này:

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

đang Previous sẽ KHÔNG làm việc becase% tùy chọn giá trị% được thay thế chỉ là một thời gian khi IF lệnh được phân tích cú pháp (trước khi nó được thực hiện) . Bạn cần phải "trì hoãn" việc mở rộng giá trị biến cho đến khi SET/P lệnh đã sửa đổi giá trị biến:

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

Kiểm tra này:

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

Đoán những gì đầu ra là ...

+1

là câu trả lời cho câu hỏi "trước"? –

+2

Nó là 'Bình thường: Trước khi Trì hoãn: Sau', nhưng biến Trì hoãn Mở rộng phải được Bật để làm việc này. Nhập 'SET /?' Và đọc kỹ từ "Cuối cùng, hỗ trợ cho việc mở rộng biến môi trường bị trì hoãn đã được thêm vào." trên... – Aacini

Các vấn đề liên quan