【问题标题】:is it possible to distinguish when shell is run from command line or from other shell?是否可以区分何时从命令行或其他 shell 运行 shell?
【发布时间】:2011-08-05 18:44:16
【问题描述】:

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

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

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

【问题讨论】:

标签: windows cmd


【解决方案1】:

让您的脚本在双击时暂停(或通过在其上放置文件),但在从控制台调用时以通常的方式终止:

@echo off

echo Hello World!

:: ...your ScriptCode...

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • Visual Studio 将是 Windows 上的常用选择。
    • 我没有。花钱吗?对吗?
    【解决方案3】:

    为什么不自己设置呢?

    SET RUNNINGFROMOTHERSHELL=YES
    CALL MYSCRIPT.CMD
    SET RUNNINGFROMOTHERSHELL=
    

    在 MyScript.Cmd 中:

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

    【讨论】:

    • 从开始->运行窗口启动cmd.exe时手动设置变量是没有意义的,这比暂停自己更糟糕。也许我应该寻找在这两种情况下不同但没有确切用途的变量。
    • 从开始->运行时你不会这样做。这就是重点。顺便说一句,没有不同的环境变量。试试看。
    • 我想你是对的,但我真的不明白它是如何工作的,我在哪里设置这个变量? MyScript 是我运行的,我在资源管理器中单击的,但我也可以运行 cmd.exe,然后在那里 cd 到文件夹并运行我的 sript,但似乎我应该把它放在另一个文件中,从那里我调用我的脚本,什么文件?然后我必须记住什么时候调用什么文件。
    • 啊,对不起,我以为你的意思是你从不同的 CMD 文件中调用它。第一部分在 CMD 中,第二部分在 MyScript 中。做你想做的事,看看凯莉的回答。
    猜你喜欢
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 2019-11-15
    • 2020-05-24
    • 2015-06-13
    • 2011-03-03
    • 2011-06-04
    • 2015-07-17
    相关资源
    最近更新 更多