V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ling516
V2EX  ›  Windows

想写一个 bat 命令行处理脚本,怎么在执行命令行后的终端继续输入命令

  •  
  •   ling516 · 2021-10-21 06:31:38 +08:00 · 1630 次点击
    这是一个创建于 889 天前的主题,其中的信息可能已经有所发展或是发生改变。

    boxie.exe attach ipc:\.\pipe\geth.ipc 执行完后跳转 welcome to XXX

    执行完这命令后会跳到另外一个终端,请问怎么在这个终端输入命令 继续执行

    执行往后保持 cmd 窗口

    3 条回复    2021-10-21 21:13:04 +08:00
    iOiOiOiOiO
        1
    iOiOiOiOiO  
       2021-10-21 06:54:57 +08:00 via iPhone
    用&&命令连接,可以顺序执行多条命令,出错后中断后面的命令
    用&一样,只是会无视错误继续执行
    hxy100
        2
    hxy100  
       2021-10-21 19:24:26 +08:00
    在命令前面加一个 start,会打开新窗口执行你的命令进程,原来的命令窗口不受影响,可以手动输入后续命令交互。比如:
    start boxie.exe attach ipc:\.\pipe\geth.ipc
    echo 你现在可以继续输入命令了...
    set /p input=等待输入
    ---------------
    另外 start 还有 /wait 参数,即等待你打开的新窗口进程执行完毕再继续执行下一条命令。
    更多参数请在 cmd 中输入 start /? 查看
    ---------------

    START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
    [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
    [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
    [command/program] [parameters]

    "title" 在窗口标题栏中显示的标题。
    path 启动目录。
    B 启动应用程序,但不创建新窗口。
    应用程序已忽略 ^C 处理。除非应用程序
    启用 ^C 处理,否则 ^Break 是唯一可以中断
    该应用程序的方式。
    I 新的环境将是传递
    给 cmd.exe 的原始环境,而不是当前环境。
    MIN 以最小化方式启动窗口。
    MAX 以最大化方式启动窗口。
    SEPARATE 在单独的内存空间中启动 16 位 Windows 程序。
    SHARED 在共享内存空间中启动 16 位 Windows 程序。
    LOW 在 IDLE 优先级类中启动应用程序。
    NORMAL 在 NORMAL 优先级类中启动应用程序。
    HIGH 在 HIGH 优先级类中启动应用程序。
    REALTIME 在 REALTIME 优先级类中启动应用程序。
    ABOVENORMAL 在 ABOVENORMAL 优先级类中启动应用程序。
    BELOWNORMAL 在 BELOWNORMAL 优先级类中启动应用程序。
    NODE 将首选非一致性内存结构(NUMA)节点指定为
    十进制整数。
    AFFINITY 将处理器关联掩码指定为十六进制数字。
    进程被限制在这些处理器上运行。

    将 /AFFINITY 和 /NODE 结合使用时,会对关联掩码
    进行不同的解释。指定关联掩码,以便将零位作为起始位置(就如将 NUMA
    节点的处理器掩码向右移位一样)。
    进程被限制在指定关联掩码和 NUMA 节点之间的
    那些通用处理器上运行。
    如果没有通用处理器,则进程被限制在
    指定的 NUMA 节点上运行。
    WAIT 启动应用程序并等待它终止。
    command/program
    如果它是内部 cmd 命令或批文件,则
    该命令处理器是使用 cmd.exe 的 /K 开关运行的。
    这表示运行该命令之后,该窗口
    将仍然存在。

    如果它不是内部 cmd 命令或批文件,则
    它就是一个程序,并将作为一个窗口化应用程序或
    控制台应用程序运行。

    parameters 这些是传递给 command/program 的参数。

    注意: 在 64 位平台上不支持 SEPARATE 和 SHARED 选项。

    通过指定 /NODE,可按照利用 NUMA 系统中的内存区域的方式
    创建进程。例如,可以创建两个完全
    通过共享内存互相通信的进程以共享相同的首选 NUMA 节点,
    从而最大限度地减少内存延迟。只要有可能,
    它们就会分配来自相同 NUMA 节点的
    内存,并且会在指定节点之外的处理器上自由运行。

    start /NODE 1 application1.exe
    start /NODE 1 application2.exe

    这两个进程可被进一步限制在相同 NUMA 节点内的指定处理器
    上运行。在以下示例中,application1 在
    节点的两个低位处理器上运行,而 application2
    在该节点的其后两个处理器上运行。该示例假定指定节点至少具有四个逻辑处理器。请注意,节点号可更改为该计算机的任何有效节点号,
    而无需更改关联掩码。

    start /NODE 1 /AFFINITY 0x3 application1.exe
    启动 /NODE 1 /AFFINITY 0xc application2.exe

    如果命令扩展被启用,通过命令行或 START 命令的外部命令
    调用会如下改变:

    将文件名作为命令键入,非可执行文件可以通过文件关联调用。
    (例如,WORD.DOC 会调用跟 .DOC 文件扩展名关联的应用程序)。
    关于如何从命令脚本内部创建这些关联,请参阅 ASSOC 和
    FTYPE 命令。

    执行的应用程序是 32 位 GUI 应用程序时,CMD.EXE 不等应用
    程序终止就返回命令提示符。如果在命令脚本内执行,该新行为
    则不会发生。

    如果执行的命令行的第一个符号是不带扩展名或路径修饰符的
    字符串 "CMD","CMD" 会被 COMSPEC 变量的数值所替换。这
    防止从当前目录提取 CMD.EXE 。

    如果执行的命令行的第一个符号没有扩展名,CMD.EXE 会使用
    PATHEXT 环境变量的数值来决定要以什么顺序寻找哪些扩展
    名。PATHEXT 变量的默认值是:

    .COM;.EXE;.BAT;.CMD

    请注意,该语法跟 PATH 变量的一样,分号隔开不同的元素。

    查找可执行文件时,如果没有相配的扩展名,看一看该名称是否
    与目录名相配。如果确实如此,START 会在那个路径上调用
    Explorer 。如果从命令行执行,则等同于对那个路径作 CD /D 。
    ling516
        3
    ling516  
    OP
       2021-10-21 21:13:04 +08:00
    谢谢大家 功能基本实现了 代码分享给大家
    echo 命令 1 >in.txt
    echo 命令 2>>in.txt
    终端代码 <in.txt
    @cmd /k


    代码实现了 cmd 执行命令后进入其他终端,执行两条命令,@cmd /k 保证在终端执行完后不退出,并保持 cmd 窗口
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3221 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:39 · PVG 19:39 · LAX 04:39 · JFK 07:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.