- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我认为我对ERRORLEVEL与%ERRORLEVEL%有基本的了解,但是!ERRORLEVEL!使我感到困惑。
我正在制作一个脚本,该脚本调用可执行文件,然后任务列表以查看其是否正在运行,然后通过taskkill将其杀死,然后尝试输出错误级别并针对其他exe重复此操作,而我意识到我真的不明白批处理中的错误级别。
我将变量设置为!errorlevel!
然后在回显中使用不带引号的变量,并且在设置后出现错误时,变量从一个uint16更改为另一个uint16,例如它引用了真实的变量而不是副本。我要复制。有人可以解释这些家伙之间的区别吗?
更新:
这是我正在处理的代码段。
for %%P in (%executableList%) do (
echo ----------------------------------------------------------------------------------
set exeErrorlevel=0
set running=false
start %%~fP
set exeErrorlevel=!ERRORLEVEL!
rem for debugging purposes
echo %%~nP%%~xP older errorlevel %ERRORLEVEL%
echo %%~nP%%~xP newer errorlevel !ERRORLEVEL!
echo before tasklist running var is : !running!
tasklist /FI "IMAGENAME eq %%~fP" | find /I /N /C "%%~fP" >nul && set running=true
echo after tasklist is running var is: !running!
if !running! equ true (
echo %%~nP%%~xP Program is running
taskkill /F /IM %%~nP%%~xP /T
echo %%~nP%%~xP Program was killed
if !exeErrorlevel! == 0 (
echo %passString% %%~nP%%~xP process was started and killed safely
echo %passString% %%~nP%%~xP process was started and killed safely >>%outputfile%
) else (
echo %failString% %%~nP%%~xP process was killed with errorcode !exeErrorlevel!
echo %failString% %%~nP%%~xP process was killed with errorcode !exeErrorlevel! >>%outputfile%
)
) else (
if !exeErrorlevel! == 0 (
echo %passString% %%~nP%%~xP process exited safely
echo %passString% %%~nP%%~xP process exited safely >>%outputfile%
) else (
taskkill /F /IM %%~nP%%~xP /T
echo %failString% %%~nP%%~xP process abruptly exited with errorcode !exeErrorlevel!
echo %failString% %%~nP%%~xP process abruptly exited with errorcode !exeErrorlevel! >>%outputfile%
)
)
echo. >>%outputfile%
)
最佳答案
错误级别errorlevel
是动态变量的名称(不是放置在环境块中,而是保存在内存中),该变量存储先前执行的过程/命令的退出代码(如果设置了该值,请读取here,here,here和here) 。if
命令允许使用if errorlevel n
语法检查errorlevel
变量的值是否大于或等于n
,而无需批处理解析器检索变量的值。
但是,如果我们将批处理解析器用于变量值,则%errorlevel%
只是对存储在变量中的值的引用,即读取操作。与!errorlevel!
一样。两者之间的主要区别是,而则根据变量扩展上的rules检索值。
使用if errorlevel
或检索变量中的值有很大的不同:
if
构造函数将不进行此测试。 set errorlevel=10
之类的操作,则动态
errorlevel
值将不会与
%errorlevel%
或
!errorlevel!
一起检索,因为在环境中设置的值将隐藏动态值。但是,由于
if errorlevel
不会读取环境块,而是直接读取保存该值的内部变量,因此它可以正常工作。
1 for %%P in (%executableList%) do (
2
3 start %%~fP
4 set exeErrorlevel=!ERRORLEVEL!
5
6 echo %%~nP%%~xP older errorlevel %ERRORLEVEL%
7 echo %%~nP%%~xP newer errorlevel !ERRORLEVEL!
8 ....
9 if !running! equ true (
10 taskkill /F /IM %%~nP%%~xP /T
11 if !exeErrorlevel! == 0 (
12 ....
13 ) else (
14 echo process killed with errorcode !exeErrorlevel!
15 )
16 ) else (
17 if !exeErrorlevel! == 0 (
18 ....
19 ) else (
20 taskkill /F /IM %%~nP%%~xP /T
21 echo process abruptly exited with errorcode !exeErrorlevel!
22 )
23 )
do
子句中的代码以及所有代码。在开始执行之前,将从代码中删除所有%var%
变量读取操作,并替换为变量内部的值。这意味着,如果变量更改了其值,则将无法检索更改的值,因为不存在读取操作,只能获取变量中的初始值。 errorlevel
变量的当前值(使用的延迟扩展),并将其存储在exeErrorlevel
变量中。但是存储的值不是可执行文件返回的errorlevel
(单独的过程,不等待其结束,我们如何知道exit code = errorlevel
是什么?),而是start
命令的退出代码。 %errorlevel%
读取操作,因此该行将回显errorlevel
子句开始执行之前存储在do
变量中的值。 errorlevel
变量的当前值。在这里,我们可能会遇到问题。如何执行脚本的命名? .bat
和.cmd
之间有区别。成功后,如果这是set
文件,则第4行中的errorlevel
命令将清除(设置为0).cmd
变量,但如果它是errorlevel
文件,则不会更改.bat
。 exeErrorlevel
变量不包含有效值。否,将行更改为!errorlevel!
不会检索流程的退出代码,而是taskkill
的退出代码。 start "" /wait programName
,并并行运行该杀死进程(例如
start /b "" monitor.bat programName
或类似的程序,然后再启动该程序) )。主进程将等待并检索退出代码。监视进程处理杀死事件。
关于windows - ERRORLEVEL与%ERRORLEVEL%与感叹号ERRORLEVEL感叹号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42967840/
在查看 tslint 规则的源代码时,我发现了以下语句: if (node.parent!.kind === ts.SyntaxKind.ObjectLiteralExpression) {
在查看 tslint 规则的源代码时,我发现了以下语句: if (node.parent!.kind === ts.SyntaxKind.ObjectLiteralExpression) {
我正在处理这个项目,并试图弄清楚前后的感叹号是什么意思。 import ICHING from '!json!constants/iching_deoxy.json'; 最佳答案 这是一个 inlin
我正在输入的内容: INSERT INTO reviews VALUES ('', title='dragon ball z', date='2012-12-01 23:06:03', usernam
在github的jade文档中,谈到了缓冲技术: 为了安全起见,默认情况下会对 = 缓冲的代码进行转义,但是要输出未转义的返回值,您可以使用 !=: p!= aVarContainingMoreHTM
我有两个变量用于包含或排除系统文件(使用最小匹配 glob 语法,其中 ! 代表排除)。 var systemFiles = ['node_modules/**/*', '.git/**/*']; v
我正在尝试切换键“1”和“!”使用 Karabiner,但我无法在任何地方找到感叹号的关键代码。不可能吗? 最佳答案 据我所知,! 没有唯一的键码。相反,它仅在系统接收到 Shift_R + 1 时输
在 Windows 7 上,文件夹搜索框中使用的以下查询无法过滤文件夹中带有“!”的文件。其中感叹号。 filename:! 请问有什么办法可以做这个搜索吗?谢谢。 最佳答案 在您的具体示例中 fil
我有一个带有CENTOS 6.4和WHM 11.38.2。的VPS。我刚刚将WHM更新为最新版本,现在当我转到phpMyAdmin时,在表名旁边和“查询”选项卡中“查询”一词之前,有一个带有白色感叹号
例如: http://localhost/#!/login.html 我不需要“!”。我将如何删除它? eg:http://localhost/#/login.html 这是我的路由器代码: //
https://stackoverflow.com/a/2787560/645703说: ($!) is strict function application. That is, it evalua
我已经看到它现在使用过一两次,其中 ! 标记放在属性名称之前。例如: !overflow: hidden; (还有,see here) 谁能阐明它的目的是什么? 最佳答案 我找不到任何关于它的信息,但
我已经看到它现在使用过一两次,其中 ! 标记放在属性名称之前。例如: !overflow: hidden; (还有,see here) 谁能阐明它的目的是什么? 最佳答案 我找不到任何关于它的信息,但
该程序的目标是获取用户输入并将其转换为 ascii 文本。 代码按其应有的方式工作,但不包含逗号、句点、感叹号或问号。 我尝试将:!、?、' 和逗号作为单独的列表包含在内,并尝试在输入中调用它。但我并
我有州列表,我已经添加了州名搜索过滤器。我有这样的数组: stateList : [{name: 'abc', area:500},{name: '!def', area:500}] 我有 与 ng-
让我们从正常行为开始。当我执行 Read-Host没有提示,我可以输入一个以感叹号开头的字符串: PS C:\> Read-Host | Foreach-Object { Write-Host 'En
我只是拼错了命令 git status 和 !git status 控制台显示它开始将最后克隆的存储库克隆到文件夹状态... 我的问题是,这个命令是什么意思,它有什么用途吗? 最佳答案 在 bash
这个问题在这里已经有了答案: What does an exclamation mark mean after the name of a function? (1 个回答) 关闭 2 年前。 Ju
我一直在 Magnolia code examples 中的 FreeMarker 代码末尾看到感叹号.例如: ${content.header!} 感叹号叫什么,它有什么作用? 最佳答案 感叹号称为
我环顾四周,找不到任何东西可以让我的脚本正确使用特殊字符(例如 ! 或 ; 或 ^) 在文件路径或文件名中。 我的脚本确实有效,但前提是上述字符不在任何扫描的文件夹或文件名中。如果任何文件夹或文件具有
我是一名优秀的程序员,十分优秀!