Linux 是否有相当于$SHLVL的Windows?

Linux 是否有相当于$SHLVL的Windows?,linux,windows,cmd,Linux,Windows,Cmd,我最近运行了一个第三方脚本,在其中运行“cmd”,从而增加了cmd窗口的嵌套深度(使我的历史记录和DOSKey宏在此过程中不可用)。所以我想知道是否有一个相当于$SHLVL或其他方式来确定这种情况?我想我可以向上箭头看看我的历史是否还在,但有一天我可能需要一个脚本 当我查看“set”的输出时,似乎没有什么不同。谢谢 编辑更改代码以列出PID 编辑2更改代码以将级别输出为%errorlevel% 看 CountConsoleProcess.vb imports System.Runtime.Int

我最近运行了一个第三方脚本,在其中运行“cmd”,从而增加了cmd窗口的嵌套深度(使我的历史记录和DOSKey宏在此过程中不可用)。所以我想知道是否有一个相当于$SHLVL或其他方式来确定这种情况?我想我可以向上箭头看看我的历史是否还在,但有一天我可能需要一个脚本


当我查看“set”的输出时,似乎没有什么不同。谢谢

编辑更改代码以列出PID

编辑2更改代码以将级别输出为
%errorlevel%

CountConsoleProcess.vb

imports System.Runtime.InteropServices 
Public Module MyApplication  

Public Declare Function GetConsoleProcessList Lib "Kernel32" (ByRef ProcessList as Integer, ByVal Count as Integer) As Integer

Public Sub Main ()
                Dim ProcessList(0 To 9) As Integer
                Dim Count As Integer
                Dim Ret As Integer
                Dim x as Integer
                Dim ColItems as Object
                Dim objWMIService As Object
                objWMIService = GetObject("winmgmts:\\.\root\cimv2")
                Count = 10
                'subtract one to account for this program
                Ret = GetConsoleProcessList(ProcessList(0), 10) - 1
                Console.Writeline("Level = " & Ret)

                For x = Ret  to 1 step -1
                    colItems = objWMIService.ExecQuery("Select * From Win32_Process where ProcessID=" & ProcessList(x))
                    For Each objItem in colItems
                        Console.writeline("PID : " & objItem.ProcessID & "  Command line : " &  objItem.CommandLine)
                    Next
                Next
                Environment.ExitCode = Ret  
End Sub
End Module 
CountConsoleProcess.bat

C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc "%~dp0\CountConsoleProcess.vb" /debug:full /out:"%~dp0\CountConsoleProcess.exe" /target:exe 
pause
REM Showing error level
"C:\Users\User\Desktop\ConsoleTest.bat"
Echo %errorlevel%
pause
Setx path "%path%;%~dp0"
Pause
控制台测试蝙蝠

C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc "%~dp0\CountConsoleProcess.vb" /debug:full /out:"%~dp0\CountConsoleProcess.exe" /target:exe 
pause
REM Showing error level
"C:\Users\User\Desktop\ConsoleTest.bat"
Echo %errorlevel%
pause
Setx path "%path%;%~dp0"
Pause
和使用(在执行
cmd/k
之后,因此它们的两个cmd正在运行)。第一个是当前PID

Microsoft Windows [Version 10.0.10240]
(c) 2015 Microsoft Corporation. All rights reserved.

C:\Windows\system32>cmd /k echo hello world
hello world

C:\Windows\system32>"C:\Users\User\Desktop\ConsoleTest.bat"

C:\Windows\system32>"C:\Users\User\Desktop\Console.exe"
Level = 2
PID : 6848  Command line : "C:\Windows\System32\cmd.exe"
PID : 7824  Command line : cmd  /k echo hello world

C:\Windows\system32>Echo 2
2    

C:\Windows\system32>
并将当前文件夹添加到路径

\u添加此foldertopath.bat

C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc "%~dp0\CountConsoleProcess.vb" /debug:full /out:"%~dp0\CountConsoleProcess.exe" /target:exe 
pause
REM Showing error level
"C:\Users\User\Desktop\ConsoleTest.bat"
Echo %errorlevel%
pause
Setx path "%path%;%~dp0"
Pause

如果你真的有一个相当于$SHLVL的东西,你会用它做什么?嗨,如前所述,我现在不需要它,我很好奇Windows是否存在这样的东西。所描述的情况肯定已经发生了,我以前在bash脚本中使用过$SHLVL。但这就引出了如何计算非shell可执行文件的问题。启动shell的x.exe是否计数?另外,当一个bash shell启动一个sh shell启动一个ksh shell启动一个ksh shell启动…?@catcat你是在开玩笑还是想让我标记你的评论?效果很好-谢谢!必须声明一个nit:x;加上这一点,它现在运行良好。标记为答案。@cniggeler您可以自己编辑答案,将
尺寸x添加为整数。反正我也要这么做。