如何在批处理文件中使用SETLOCAL?

时间:2012-12-04 13:38:08

标签: batch-file

如何在批处理文件中使用setlocal?我只是在学习脚本,并希望用非常简单的术语向我解释。

我有一个脚本停止并说< was unexpected at this time它可能与脚本中没有任何setlocal语句有关。

3 个答案:

答案 0 :(得分:24)

你制作第一行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 ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

有关SETLOCAL的详细信息,请参阅Microsoft TechNet上的Command Line Reference

指向Setlocal

的直接链接

答案 1 :(得分:11)

假设此代码:

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

以前的代码不起作用因为在解析IF命令时(在执行之前),只更换一次%选项%值。您需要“延迟”变量值扩展,直到SET / P命令修改了变量值:

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!

猜猜输出是什么......

答案 2 :(得分:0)

SET PATH =%PATH%;%〜dp0;这将获取您正在运行批处理的本地文件夹,并将其添加到当前路径。 例如:如果您从d:\ tools \ mybatch.bat运行.bat或.cmd 它将d:\ tools添加到当前路径,以便可以在该文件夹中找到其他文件。