当前位置: 首页 > 知识库问答 >
问题:

Windows批处理:在被调用批处理打开的cmd窗口中运行命令?

刘辰钊
2023-03-14

我想运行一个批处理文件A,它调用/启动另一个批处理文件B,后者打开一个新的cmd窗口。然后,我想在这个新的cmd窗口中运行一个用户定义的命令。这个命令只有在运行文件B之后或者在这个新的cmd-window中才能被识别,但是命令本身的调用应该是写在文件A中的(文件B是设置好的,不能更改)。我该怎么做?

就我所理解的行为而言,我不能访问由另一个批处理文件打开的cmd窗口。我写了一个简单的测试用例来向你展示这个问题,请看下面。

我已经尝试了调用启动。如果我在cmd窗口中手动运行批处理文件B,我可以在同一窗口中运行用户定义的命令,因为当前cmd窗口已“更新”,并且该命令已被识别。

简单测试用例:在本例中,之后的所有命令都调用scriptB。文件A中的bat被忽略(可能是因为命令是在旧的cmd窗口中运行的,该窗口被B中打开的新cmd窗口“覆盖”,该窗口现在处于活动状态)。如何将命令(尤其是用户定义的命令)传递到新的cmd窗口?

scriptA.bat:

@echo off

echo Start script!
call scriptB.bat
%user_command%
echo End script!
pause

脚本 B.bat:

@echo off

set user_command=echo USER COMMAND!
cmd

输出:

Start script!
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
*my Path*>

共有1个答案

高砚
2023-03-14

重读Q之后,很明显用户希望在两个脚本中都设置变量,然后以某种方式用脚本A中的值覆盖脚本B中设置的值,脚本A中的值是事后设置的。

如果不将脚本B更改为使用WMIC从注册表中读取变量名称的信息并让脚本A使用SetX,或者让脚本A写入文件并让脚本B从文件中读取,这是不可能的。

但是,这将创建一个 Race 条件,因为脚本 A 可能会在脚本 B 检查之前或之后设置该值。

此外,脚本B无论如何都不能修改,如果可以,则可以设置为在脚本a中使用普通set命令,然后让脚本B使用这些变量。

 类似资料:
  • 标题说明了一切:我想用命令启动cmd窗口,但我想隐藏窗口 这就是我想要的,但是cmd窗口仍然是打开的,关闭后我也结束了这个命令。我想在后台运行cmd.exe。可能吗?

  • 本文向大家介绍Windows运行bat批处理文件时隐藏cmd命令提示符窗口的方法,包括了Windows运行bat批处理文件时隐藏cmd命令提示符窗口的方法的使用技巧和注意事项,需要的朋友参考一下 我们在Windows中运行bat批处理文件时往往会弹出一个cmd命令提示符窗口,然后等一会儿cmd窗口就自动关闭了,有人会说,直接在bat批处理文件中加入echo off命令么好了,没错,echo off

  • 来自火花流背景-掌握Kafka流。 我有一个简单的Spark流媒体应用程序, 并返回该分钟内每个用户的最新事件 示例事件类似于 我感兴趣的是这将如何在Kafka流中工作,因为似乎每个事件都有一个输出--当我的用例是减少流量时。 从我到目前为止的阅读来看,这似乎不是直接的,您将不得不使用处理器API。 理想情况下,我希望使用DSL而不是处理器API,因为我刚刚开始研究Kafka流,但似乎我必须使用处

  • 在本章中,我们来看一看一些经常使用的批处理命令。如下图中所示 - 编号 命令 描述 1 VER 此批处理命令显示正在使用的MS-DOS的版本。 2 ASSOC 这是将扩展名与文件类型(FTYPE)相关联的批处理命令,显示现有关联或删除关联。 3 CD 此批处理命令用于更改进入不同的目录,或显示当前目录。 4 CLS 这个批处理命令清除屏幕。 5 COPY 此批处理命令用于将文件从一个位置复制到另一

  • 问题内容: 我正在Windows 7上运行詹金斯服务。 我想做一个非常简单的工作,这将启动我的Firefox。(例如) 我配置了一个自由样式项目,并设置了“执行Windows批处理命令”选项。 在这里,我尝试插入几条命令,但它们均失败了。 像“ echo hello”之类的命令或其他本机命令按预期工作。 但是类似“ explorer”的命令-应该打开提到的目录,否则“ c:\ firefox.ln

  • 主要内容:命令行打印机控制,测试打印机是否存在也可以通过命令从批处理脚本中控制打印。 语法 其中, - 指定打印设备。 示例 上述命令将打印文件到并行端口。 命令行打印机控制 从Windows 2000开始,可以使用和从Windows的命令行配置许多但不是全部的打印机设置 语法 有一些可用的选项是以下 - /dl - 删除本地打印机。 /dn - 删除网络打印机连接。 /dd - 删除打印机驱动。 /e - 显示打印首选项。 /f[file]