40

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

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

4

3 回答 3

27

你做第一行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 上的命令行参考

直接链接到Setlocal

于 2012-12-04T13:46:10.623 回答
10

假设这段代码:

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

以前的代码将不起作用,因为 %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!

猜猜输出是什么...

于 2012-12-04T16:40:50.180 回答
-3

尝试这个:

SET PATH=%PATH%;%~dp0;

这将获取您正在运行批处理的本地文件夹并将其添加到当前路径。

示例:如果您正在运行 a.bat.cmdfrom d:\tools\mybatch.bat ,它将添加d:\tools到当前路径,以便它可以在该文件夹中找到其他文件。

于 2019-06-02T04:29:20.593 回答