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

Dre*_*Dre 36 batch-file

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

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

Ken*_*ite 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
Run Code Online (Sandbox Code Playgroud)

最常用的SETLOCAL是打开命令扩展并允许延迟扩展变量:

SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
Run Code Online (Sandbox Code Playgroud)

有关详细信息,SETLOCAL请参阅Microsoft TechNet 上的命令行参考.

直接链接到Setlocal

  • 我认为链接站点的第一句话就是这样,即"在批处理文件中开始环境变量的本地化.本地化一直持续到遇到匹配的endlocal命令或者到达批处理文件的末尾.".换句话说,它允许您设置仅在批处理文件中看到的环境变量(通常是全局的),并在执行`ENDLOCAL`调用或批处理文件结束时自动清除它们. (10认同)
  • 你能给我一个如何运作的例子吗?你将如何以及为何使用它? (3认同)
  • 注意,`setlocal`还将所有目录更改也设置为本地!这意味着之后,您将返回到原始目录。 (2认同)

Aac*_*ini 11

假设这段代码:

If "%getOption%" equ  "yes" (
   set /P option=Enter option: 
   echo Option read: %option%
)
Run Code Online (Sandbox Code Playgroud)

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

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

检查一下:

set var=Before
set var=After & echo Normal: %var%  Delayed: !var!
Run Code Online (Sandbox Code Playgroud)

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

  • 它是"正常:延迟之前:之后",但必须启用延迟变量扩展才能使其正常工作.键入`SET /?`并仔细阅读"最后,添加了对延迟环境变量扩展的支持." 上... (2认同)