如何在批处理文件中使用setlocal
?我只是在学习脚本,并希望用非常简单的术语向我解释。
我有一个脚本停止并说< was unexpected at this time
它可能与脚本中没有任何setlocal
语句有关。
答案 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添加到当前路径,以便可以在该文件夹中找到其他文件。