【问题标题】:How to detect User typing in console vs. Background Task using BATCH commands?如何使用 BATCH 命令检测用户在控制台和后台任务中的输入?
【发布时间】:2012-05-04 15:15:27
【问题描述】:

我想知道如何检测计算机后面是否有人正在使用 Windows Server 终端/控制台来启动一组 BATCH 脚本,或者是否有一个自动后台任务正在启动这些脚本。 我必须使用简单的批处理脚本来检测这一点。

我一直在互联网上寻找这两种“用户”之间可能存在的差异,但找不到任何有用的信息。欢迎任何解决方案:击键捕获、重定向的标准输入、终端/控制台会话 ID 等。我尝试了所有这些,但直到现在都无法成功。

该解决方案必须在 Windows Server 2003、2008 和 2008 R2 上运行。 但首先,我很高兴看到它仅在 WS 2003 上运行。

提前感谢您的回答!

【问题讨论】:

    标签: session batch-file background task


    【解决方案1】:

    我想我不太明白您所说的“如何检测计算机后面是否有人”是什么意思。然而,this post 有一种方法可以检测STDIN 是否被重定向到磁盘文件,这可能意味着没有人在这个批处理文件中输入输入,但它是在一个自动化的方式。例如:

    TypeOfHandle 0
    if %errorlevel% geq 128 (
        rem STDIN redirected to disk file
        echo This program must be executed in interactive (not predefined-input) way^!
        goto :EOF
    )
    set /P input=Enter input please: 
    etc...
    

    希望对你有帮助……

    【讨论】:

    • +1,但我不确定输入是否会被重定向,我想批处理将简单地由用户或类似autostart的自动启动
    • 顺便说一句。您应该转义 echo ... (not predefined-input^) way^! 中的最后一个括号
    【解决方案2】:
    If /i "%cmdcmdline:~0,6%"=="cmd /c" pause
    

    这通常适用于双击的批处理文件。

    @for /f "tokens=10* delims=," %A in ('tasklist /fi "SESSION ne 1" /fi "imagename eq cmd.exe" /v /nh /fo CSV') do echo %A
    

    将列出在其他会话中运行的 cmd 标题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多