如何仅在新窗口中执行时“暂停”?

如何仅在新窗口中执行时“暂停”?

我编写了一个批处理脚本,该脚本假定%1是文件路径。有时我想通过 Windows 资源管理器中的拖放操作来使用此批处理脚本(将目标文件拖到批处理脚本文件上),有时我想从现有的命令提示符窗口运行此批处理脚本并%1明确提供我的路径(通常只是相对路径)。

我不希望我的脚本在“拖放”时立即消失,因此我需要pause。但是,我不希望any key to continue每次使用现有命令提示符窗口时都必须按 ,因此我不需要pause

有没有办法两全其美?我能以某种方式检测/推断我所处的场景,然后决定是否暂停吗?最好的方法是什么?

答案1

尝试在批处理文件中使用它:

set arg0=%0
if [%arg0:~2,1%]==[:] pause

这将检查第 0 个参数(基本上是批处理文件名本身)的第 3 个字符是否是冒号。

通常,当您将某些内容拖放到批处理文件上时,它被调用为:"Drive:\path\to\Batch File.bat" Arg1 Arg2 ...但是,当我们从命令提示符执行批处理文件时,我们通常不会这样调用它,而是使用带引号的绝对路径。因此,我们可以利用这种差异,并且只有pause当冒号作为第 3 个字符存在时才执行,这意味着批处理文件是通过拖放执行的。当然,如果您确实使用带引号的绝对路径从命令提示符执行批处理文件,它自然也会如此pause

答案2

cmd /k在脚本末尾添加一个。在现有窗口中,它将返回到命令提示符,在新窗口中,它将执行相同操作,并保持窗口打开。

@echo off
echo "some text"
cmd /k

注意 /k 是停止打印:

Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

相关内容