Windows 是否可以区分shell是从命令行还是从其他shell运行的?

Windows 是否可以区分shell是从命令行还是从其他shell运行的?,windows,cmd,Windows,Cmd,例如,我可以直接调用myscript.cmd,或者在其他脚本中为myscript添加一行代码 原因是,如果脚本是自己运行的,它会在停止执行时立即消失,因此我看不到结果,所以最后我必须添加@pause,但当我从另一个shell运行它时,这会引起麻烦,因为控制台窗口不会以这种方式退出 所以我寻找某种“如果”条件来解决这个问题。为什么不自己设置呢 SET RUNNINGFROMOTHERSHELL=YES CALL MYSCRIPT.CMD SET RUNNINGFROMOTHERSHELL= 在M

例如,我可以直接调用
myscript.cmd
,或者在其他脚本中为myscript添加一行代码

原因是,如果脚本是自己运行的,它会在停止执行时立即消失,因此我看不到结果,所以最后我必须添加
@pause
,但当我从另一个shell运行它时,这会引起麻烦,因为控制台窗口不会以这种方式退出


所以我寻找某种“如果”条件来解决这个问题。

为什么不自己设置呢

SET RUNNINGFROMOTHERSHELL=YES
CALL MYSCRIPT.CMD
SET RUNNINGFROMOTHERSHELL=
在MyScript.Cmd中:

IF "%RUNNINGFROMOTHERSHELL%"=="" GOTO NOPAUSE
PAUSE
:NOPAUSE

除非你像斯图建议的那样创建一个环境变量,否则你不会找到任何你想要的。您需要编写一个小程序,以编程方式查询父进程并返回脚本可以检查的值。如果从开始运行->运行,则父级将为explorer.exe。否则它将是cmd.exe或其他一些exe


可以找到查找父进程的示例代码。

要使脚本在双击时暂停(或通过在其上放置文件),但在从控制台调用时以常规方式终止,请执行以下操作:

@echo off

echo Hello World!

:: ...your ScriptCode...

(((echo.%CMDCMDLINE%)|find /I "%~0")>NUL)&&pause

从“开始->运行”窗口启动cmd.exe时,手动设置变量是没有意义的,这比暂停本身更糟糕。也许我应该寻找在这两种情况下都不同的变量,但并没有明确的目的。当从开始->运行时,你不会这样做。这就是重点。顺便说一下,没有不同的环境变量。试试看。我想你是对的,但我真的不明白它是如何工作的,我应该在哪里设置这个变量?MyScript是我运行的,是我在资源管理器中单击的,但是我也可以运行cmd.exe,然后在那里的cd中运行我的sript,但是我似乎应该把它放在另一个文件中,从那里我可以调用我的脚本,什么文件?然后我必须记得什么时候调用哪个文件。啊,对不起,我以为你的意思是你从另一个CMD文件调用它。第一部分在CMD中,第二部分在MyScript中。要想做你想做的事,请看凯莉的答案。哇,很有趣。我从未注意到%cmdline%,因为它没有显示在环境变量列表中。这是你的解决方案,rsk82。Visual Studio将是Windows上的常用选择。我没有。要花钱吗?正确的?