确定批处理脚本是否已从命令行 (cmd) 启动/执行 - 或 - 暂停还是不暂停?

2024-04-05

我喜欢在我的目录中有一个典型的“usage:”行cmd.exe脚本 — 如果缺少参数,系统会简单提醒用户如何使用脚本。

问题是我无法安全地预测潜在用户是否会使用 GUI 还是 CLI。如果使用 GUI 的人在资源管理器窗口中双击此脚本,他们将没有机会阅读任何内容,除非我pause窗户。如果他们使用 CLI,pause会打扰他们。

所以我正在寻找一种方法来检测它。

@echo off
if _%1_==__ (
    echo usage: %nx0: filename
    rem now pause or not to pause?
)

这方面有好的解决办法吗?


您可以检查的值%CMDCMDLINE%多变的。它包含用于启动的命令cmd.exe.

我准备了一个测试.bat文件:

@Echo Off
echo %CMDCMDLINE%
pause

当从 open 内部运行时cmd.exe窗口,脚本打印"C:\Windows\system32\cmd.exe"。 双击运行时,会打印cmd /c ""C:\Users\mbu\Desktop\test.bat" "

因此,要检查脚本是否通过双击启动,您需要检查是否%cmdcmdline%包含脚本的路径。最终的解决方案如下所示:

@echo off

set interactive=1
echo %cmdcmdline% | find /i "%~0" >nul
if not errorlevel 1 set interactive=0

rem now I can use %interactive% anywhere

if _%1_==__ (
    echo usage: %~nx0 filename
    if _%interactive%_==_0_ pause
)

Edit:对评论中讨论的问题更改进行了修复;编辑示例来演示它们

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

确定批处理脚本是否已从命令行 (cmd) 启动/执行 - 或 - 暂停还是不暂停? 的相关文章

随机推荐

  • 如何判断当前TD是否是TR中最后一个TD

    我有单行和多行 td 就在里面 在我的一个职能中 我遇到了一种情况 我必须找出我的currentSelectedTD是最后一个 td 放在行中 以便我可以以不同的方式对待它 I tried currentSelectedTD is last
  • Html 文本悬停在每个单词上进行翻译

    您好 我有一个 HTML 页面 其中包含文本正文 我希望能够将鼠标悬停在文本中的单词上 然后一小朵云显示文本中该单词的翻译 知道我该怎么做吗 我将提供我需要知道哪种是在悬停时将每个单词从文本中分离出来的最佳方法 并使用单词或翻译列表进行检查
  • 如何在 ConstraintLayout 中显示 GoogleMap?

    我创建了一个新项目 MapsActivity 我从 Google 获取了 API 密钥 并将 API 密钥放置在 YOUR KEY HERE 区域内的 google maps API xml debug 中 我在 AndroidManife
  • 泛型方法的可重用非泛型方法

    我有以下基本界面 public interface IHandler void Handle IMessage message 以及继承基接口的通用接口 public interface IHandler
  • 基于 OpenID 的 SSO 和 WSO2 身份服务器

    无法使用 WSO2 身份服务器获得基于 OpenID 的 SSO 我关注了 Suresh Aththanayaka 给出的博客文章 但是进入后https localhost 9443 openid admin作为您的 OpenID 标识符
  • PHP 类中的错误处理

    嘿 这里有个问题要问你们 我有很多次为 PHP 中的类选择错误处理 例如 在 Ajax PHP 处理类中 我这样做 public function setError msg this gt errors msg public functio
  • ASP.net 必需字段验证器 VisualStudio 2012

    我正在使用 ASP net c 开发一个项目 我希望RequiredFieldValidator 检查我的文本框 我正在添加验证器 它在 Visual Studio 2010 中工作得很好 但是一旦我做了同样的事情 完全相同的事情 它就无法
  • 整数比较值的输出错误

    我有以下代码 public static void doIntCompareProcess int a 100 int b 100 Integer c 200 Integer d 200 int f 20000 int e 20000 Sy
  • 如何创建波浪形状 CSS?

    请参阅下图了解我正在尝试创建的内容 到目前为止 我有以下内容 但它需要更加 频繁 例如增加正弦波或余弦波的频率 wave position relative height 70px width 600px background e0efe3
  • SwiftUI 可从 NavigationView 向下搜索多个视图?

    我遇到了相关问题 searchable我想知道它是否与我的应用程序的视图层次结构有关 我可以找到的使用 Searchable 的示例说直接在 NavigationView 上使用它 并像这样显示它 var body some View Na
  • 如何对 React 组件的 shouldComponentUpdate 方法进行单元测试

    我有一个 React 组件 它实现了应该组件更新 https facebook github io react docs react component html shouldcomponentupdate方法 我想对其进行单元测试 理想情
  • Vapor 3 - 如何在保存对象之前检查类似的电子邮件

    我想创建一条路线来让用户更新他们的数据 例如更改他们的电子邮件或用户名 为了确保用户不能使用与其他用户相同的用户名 我想检查数据库中是否已存在具有相同用户名的用户 我已经使用户名在迁移中唯一 我有一个如下所示的用户模型 struct Use
  • Three.jsmaterialLoader不加载嵌入的纹理图像

    我使用 Material toJSON 提供的方法导出 Three js 材质 结果如下 metadata version 4 5 type Material generator Material toJSON uuid 8E6F9A32
  • Task.ContinueWith 没有按照我的预期工作

    考虑以下代码 我从一个不执行任何操作的任务开始 然后使用ContinueWith 启动对递增计数器的方法的10 次调用 当我运行这个程序时 它打印 0 表明increment 方法根本没有被调用 我预计它会被调用 10 次 因为这就是我调用
  • 从 Excel 粘贴到 WPF DataGrid

    我有一个 DataGrid 称为 TheGrid 我想在其上实现复制和粘贴功能 复制功能很好用 但我不知道如何实现粘贴 我只需要从剪贴板获取数据并自己解析吗 命令绑定
  • 奇怪的 Firefox 溢出/浮动行为

    我有一个简单的布局 http 195 228 155 116 szilk public templates globallog bemutatkozas html它在 Chrome Safari 甚至 Opera OS X 中运行良好 让我
  • Terraform 无法使用 Amazon EC2 导入密钥对

    使用 Terraform 0 7 7 我有一个简单的 Terraform 文件 其中包含以下内容 provider aws access key var access key secret key var secret key region
  • 当我在本地运行 CoreNLP 时,为什么“corenlp.run”会产生不同的结果?

    网站corenlp run http corenlp run它应该是 CoreNLP 演示站点 显示的结果与我在本地计算机上运行 CoreNLP 管道时的结果截然不同 网站上确实显示了正确的结果 而本地机版本却没有 我想知道是否有任何接近
  • 启动 Rails 应用程序,从本地网络外部向应用程序发出请求

    我确信这是一个非常基本的问题 但我找不到答案 我已经看过了这个问题 https stackoverflow com questions 13853936 cannot assign requested address bind2 errno
  • 确定批处理脚本是否已从命令行 (cmd) 启动/执行 - 或 - 暂停还是不暂停?

    我喜欢在我的目录中有一个典型的 usage 行cmd exe脚本 如果缺少参数 系统会简单提醒用户如何使用脚本 问题是我无法安全地预测潜在用户是否会使用 GUI 还是 CLI 如果使用 GUI 的人在资源管理器窗口中双击此脚本 他们将没有机