看看下面的命令:为什么在&后立即不可用的值?
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总是空的(带有退出代码的文件存在并包含正确的退出代码)。
在哪里设置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] 举报,一经查实,本站将立刻删除。