微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在一个windows cmd行中运行两个命令,一个命令是SET命令

[目的]

这个简单的命令序列在Windows的CMD shell中运行:

dir & echo hello

将列出文件和目录并回显字符串.

但是,以下命令序列未按预期运行(至少由我):

C:\Users\Administrator>set name=value & echo %name%
%name%

C:\Users\Administrator>echo %name%
value

C:\Users\Administrator>

我们可以看到,第一个回声无法获得环境.你能帮忙发表评论吗?任何评论将不胜感激!

PS:操作系统:Windows 7 X64 Home Pre

您的结果是由于%name%在解析阶段被扩展,并且在设置值之前立即解析整个行.

您可以通过两种方式之一获取与set命令在同一行的当前值.

1)使用CALL导致第二次解析ECHO%NAME%:

set name=value&call echo %^name%

我在百分之间放了一个^,以防在行执行之前已经定义了名称.如果没有插入符号,您将获得旧值.

注意:您的原始行在&之前有一个空格,此空间将包含在变量的值中.您可以使用引号来阻止额外空间:set“name = value”& …

2)使用延迟扩展来获取执行时而不是解析时的值.大多数环境认情况下没有启用延迟扩展.您可以使用适当的CMD.EXE选项在命令行上启用延迟扩展.

cmd /v:on
set "name=value" & echo !name!

延迟扩展当然可以在命令行上使用,但它在批处理文件中更常用. SETLOCAL用于在批处理文件中启用延迟扩展(它不能从命令行运行)

setlocal enableDelayedExpansion
set "name=value" & echo !name!

原文地址:https://www.jb51.cc/windows/363488.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐