我认为我对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 …
Run Code Online (Sandbox Code Playgroud) 我想检查我理解正确.如果我在标题中有以下内容:
public Obj * objPtr;
Run Code Online (Sandbox Code Playgroud)
以及课堂上的以下内容:
void create() {
//create a local variable object
Obj localVar = object();
objPtr = &localVar;
}
void edit(){
//attempt to edit value of member pointer
objPtr->edit();
}
Run Code Online (Sandbox Code Playgroud)
我是否认为它永远不会起作用?因为localVar是本地的,它会在create函数之外被销毁一次,使objPtr具有空内存的地址,这意味着objPtr是一个空指针?
其次,如果我做了它会工作:
Obj localVar = new object()
或者
objPtr = new object()
batch-file ×1
c++ ×1
cmd ×1
errorlevel ×1
heap-memory ×1
pointers ×1
stack-memory ×1
windows ×1