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

Windows命令行:为什么环境variables不可用后&

看看下面的命令:为什么在&后立即不可用的值?

C:>set a= C:>set a=3&echo %a% %a% C:>echo %a% 3 C:>set a=3&echo %a% 3

但是当我这样做

C:>set a= C:>set a=3&set

列出的variables中包含a = 3!

我需要这个在这里学到的技巧来获得一个命令的输出代码,即使输出是pipe道input: Windows命令解释器:如何获得第一个pipe道命令的退出代码,但是我必须在make脚本中使用它,这就是为什么一切必须在一行! 这是我想要做的:

从AWK读取variables

带有path,命令选项和variables的Shell_exec

什么语法将检查是否定义了包含空格的variables名?

环境variables不会从.htaccess传递到PHP

在bash中可变增量

target: ($(command) & call echo %%^^errorlevel%% ^>$(exitcodefile)) 2>&1 | tee $(logfile) & set /p errorlevel_make=<$(exitcodefile) & exit /B %errorlevel_make%

但errorlevel_make总是空的(带有退出代码文件存在并包含正确的退出代码)。

这是一个错误在CMD? 任何想法我可以做什么?

在哪里设置path

Power Shell的环境variables

环境variables是否联想?

Windows回显命令无法回显用户设置的variables

如何在Jenkins脚本中获取我的$ PATH以匹配Jenkins运行的用户下的$ PATH?

创建一个独立的批处理文件解决这个问题要容易得多,因为即使对于专家来说也是不明显的。

但在你的情况下,这应该工作

target: ($(command) & call echo %^^^^errorlevel% >$(exitcodefile)) 2>&1 | tee $(logfile) & set /p errorlevel_make=<$(exitcodefile) & call exit /B %^errorlevel_make%

一个单独的批次可能看起来像

extBatch.bat

@echo off ("%~1" & call echo %%^^errorlevel%% > "%~2") 2>&1 | tee "%~3" & set /p errorlevel_make=<"%~2" exit /B %errorlevel_make%

然后你可以从你的make文件开始批处理

target: extBatch.bat $(command) $(exitcodefile) $(logfile)

观察到的行为的原因是如何处理命令行。

在第一种情况下, set a=3&echo %a% ,当行被解释之前执行IT,所有变量都被替换为它们的值。 a在执行之前没有值,所以不能用echo来代替

在第二种情况下, set a=3&set ,执行前没有变量替换。 所以,当set被执行时,a的值被赋值。

受jeb好的回答的启发,我修改了一下代码,以便能够单独获取管道每一侧的错误级别。 例如,在批处理文件中有以下管道:

CD non_exisitng 2>&1 | FIND /V "" ECHO Errorlevel @right: %errorlevel%

上面的错误级别仅指管道的右侧,它表示FIND命令是否成功。 但是,为了能够获得双方的错误级别,我们可以将上面的代码更改为如下所示:

(CD non_exisitng & CALL ECHO %%^^errorlevel%% >err) 2>&1 | FIND /V "" ECHO Errorlevel @right: %errorlevel% SET /P err=<err ECHO Errorlevel @left: %err%

输出

The system cannot find the path specified. errorlevel @right: 0 errorlevel @left: 1

@OP:

我意识到这有点晚,但可能对别人有帮助。 除了jeb的外部批处理文件方法外,原来的问题也可以作为一个单一的内容解决

target: ($(command) & call echo %%^^errorlevel%% >$(exitcodefile)) 2>&1 | tee $(logfile) & set /p errorlevel_make=<$(exitcodefile) & cmd /c call exit /B %%errorlevel_make%%

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

相关推荐