如何从 MATLAB 执行 dos 命令并将控制权立即返回给 MATLAB(不生成 dos 窗口)

2023-11-25

我想从 MATLAB 在 dos 中执行批处理文件,并将控制权立即返回给 MATLAB。但是,我想在不打开 dos 窗口的情况下执行此操作(或者至少让 dos 窗口在最后消失)。

如果我像这样格式化我的命令......

s = dos('batchfilename.bat');

然后 MATLAB 运行批处理文件而不打开 dos 窗口,但 MATLAB 代码必须等待返回。

如果我像这样格式化我的命令......

s = dos('batchfilename.bat &');

控制权立即返回给 MATLAB,但它也显示 dos 窗口,这是我不想要的。 (当你这样做时,也很难检测批处理文件何时“完成”)

任何帮助,将不胜感激。


使用 Matlab 的外部接口支持来访问较低级别语言的过程控制功能。

.NET版本

使用.NET System.Diagnostics.Process 类。它可以让您异步运行一个进程,检查它何时退出,并收集退出代码。您可以选择隐藏其窗口或使其可见以进行调试。

您可以直接从 M 代码调用 .NET 类。

function launch_a_bat_file()
%//LAUNCH_A_BAT_FYLE Run a bat file with asynchronous process control

batFile = 'c:\temp\example.bat';
startInfo = System.Diagnostics.ProcessStartInfo('cmd.exe', sprintf('/c "%s"', batFile));
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;  %// if you want it invisible
proc = System.Diagnostics.Process.Start(startInfo);
if isempty(proc)
    error('Failed to launch process');
end
while true
    if proc.HasExited
        fprintf('\nProcess exited with status %d\n', proc.ExitCode);
        break
    end
    fprintf('.');
    pause(.1);
end

Java版本

.NET 版本需要足够新的 Matlab 才能支持 .NET。这是一个针对旧版 Matlab 的基于 Java 的版本,就像 OP 所具有的那样。经过一些修改也应该可以在非 Windows 系统上工作。

function launch_a_bat_file_with_java
%LAUNCH_A_BAT_FILE_WITH_JAVA  Java-based version for old Matlab versions

batFile = 'c:\temp\example.bat';
cmd = sprintf('cmd.exe /c "%s"', batFile);
runtime = java.lang.Runtime.getRuntime();
proc = runtime.exec(cmd);

while true
    try
        exitCode = proc.exitValue();
        fprintf('\nProcess exited with status %d\n', exitCode);
        break;
    catch
        err = lasterror(); % old syntax for compatibility
        if strfind(err.message, 'process has not exited')
            fprintf('.');
            pause(.1);
        else
            rethrow(err);
        end
    end
end

您可能需要摆弄 Java 版本中的 I/O 以避免挂起已启动的进程; demarcmj 指出,您需要读取并刷新进程的输入流以获取标准输出,以避免它被填满。

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

如何从 MATLAB 执行 dos 命令并将控制权立即返回给 MATLAB(不生成 dos 窗口) 的相关文章

  • Microsoft Visual C++ 2008 和 R2007b 的 Mex 类型

    我想对 vs2008 和 matlab2007b 使用 mex 类型 我尝试了下面的代码 include
  • 在批处理脚本中发送 Windows 密钥

    我最近一直在使用SendKeys使用批处理脚本的函数 我已经了解如何在窗口中输入某些键 例如 Tab 键 SendKeys TAB 或者退格键 SendKeys BACKSPACE 但我一直尝试在不按Windows键的情况下输入它 不幸的是
  • opencv中矩阵的超快中值(与matlab一样快)

    我正在 openCV 中编写一些代码 想要找到一个非常大的矩阵数组 单通道灰度 浮点数 的中值 我尝试了几种方法 例如对数组进行排序 使用 std sort 和选择中间条目 但与 matlab 中的中值函数相比 它非常慢 准确地说 在 ma
  • 如何清除通过“set /p var1=”从命令行设置的变量

    在 Windows 批处理文件中 我接受来自用户输入的变量set p var1 after var1已使用 我不知道如何重置 清除其值 如果我不重置 清除它的值 当用户遇到set p var1 再次 用户直接输入 之前的输入值仍然存在 我不
  • 类方法的自定义代码完成?

    在 MATLAB 中 可以定义代码建议和完成 如标题为 的文档页面中所述 自定义代码建议和完成 https www mathworks com help matlab matlab prog customize code suggestio
  • Windows 批处理文件:如何启用命令的内联回显

    如果在 Windows 批处理文件中默认禁用 echo 是否有办法为特定命令 内联 启用它 我知道可以回显特定命令disabled通过在命令前添加 但是有没有办法做相反的事情呢 例如 假设有一个像这样的批处理文件 echo off cmd1
  • MATLAB:比较两个不同长度的数组

    我有两个长度不同的数组 由于采样率不同 需要比较 我想对较大的数组进行下采样以匹配较小的数组的长度 但是该因子不是整数而是小数 举个例子 a 1 1 375 1 75 2 125 2 5 2 875 3 25 b 1 2 3 有什么方法可以
  • 如何从绘图处理程序中绘图?

    我有绘图的处理程序或图形的处理程序 例子 h plot 1 0 2 10 xx get h xx DisplayName Annotation 1x1 handle Color 0 0 1 LineStyle LineWidth 0 500
  • 傅里叶变换定理 matlab

    我目前正在尝试理解二维傅里叶位移定理 根据我到目前为止所了解到的情况 图像空间中的平移会导致相位差异 但不会导致频率空间中的幅度差异 我试图用一个小例子来演示这一点 但它只适用于行的移位 而不适用于列的移位 这是一个小演示 我只在这里显示幅
  • 如何使用 Windows 命令行环境查找和替换文件中的文本?

    我正在使用 Windows 命令行环境编写批处理文件脚本 并希望用另一个文件 例如 BAR 更改文件中某些文本 例如 FOO 的每次出现 最简单的方法是什么 有内置函数吗 这里的很多答案都帮助我指明了正确的方向 但是没有一个适合我 所以我发
  • 需要帮助通过批处理文件添加注册表项

    我正在尝试通过cmd添加以下注册表项 我无法让其他用户能够使用以下命令添加此注册表项regedit exe s Location Project reg HKEY CURRENT USER Software Autodesk Fabrica
  • 在 MATLAB 中定义其他中缀运算符

    有没有办法在 MATLAB 中定义额外的中缀运算符 具体来说 我想定义两个中缀运算符 gt and lt gt 这些符号是理想的 但如果需要 它可以是单个字符 它调用函数implies and iff以同样的方式 calls and and
  • 为什么 MATLAB 本机函数 cov(协方差矩阵计算)使用与我预期不同的除数?

    给定一个 M 维和 N 个样本的数据矩阵数据 例如 data randn N M 我可以计算协方差矩阵 data mu data ones N 1 mean data cov matrix data mu data mu N 如果我使用原生
  • 如何加载具有可变文件名的 .mat 文件?

    select all mat files oar dir oar mat n oar name loop through files for l 1 length oar load pat oar l lt this is the mat
  • 在Matlab中选择图像上的像素时,索引指的是什么?

    当在Matlab中查看图像的单个像素时 该索引指的是什么 X Y 指的是像素的坐标 RGB 指的是颜色 但是关于索引是什么有什么想法吗 为了澄清一下 当我在 Matlab 中查看图形并使用数据光标选择一个点时 显示的三行是 X Y 指数 R
  • 为什么 Windows 批处理文件“exit”不能与“||”一起使用?

    批处理 命令脚本中的通常建议是使用exit b设置时退出ERRORLEVEL来指示错误 然而这与 CMD 的配合不太好 and 运营商 如果我在 CMD 命令行运行这些 C gt echo exit b 1 gt foo cmd C gt
  • 回显 unicode 字符

    我想通过运行bat 文件在cmd 中回显unicode 字符 我准备了一个简短的脚本 echo off SET message G p3 echo message pause 我怎样才能做到这一点 是否可以直接将这封信放入代码中 这样做 两
  • 通过管道连接到 findstr 的输入

    我有一个文本文件 其中包含宏名称列表 每行一个 我的最终目标是打印宏名称在当前目录的文件中出现的次数 宏的名称位于C temp macros txt type C temp macros txt在命令提示符下可以正常打印列表 现在我想将该输
  • 检查图像中是否有太薄的区域

    我正在尝试验证雕刻机的黑白图像 更多的是剪贴画图像 不是照片 我需要考虑的主要事情之一是区域的大小 或线条的宽度 因为机器无法处理太细的线条 所以我需要找到比给定阈值更细的区域 以此图为例 竖琴的琴弦可能太细而无法雕刻 我正在阅读有关 Ma
  • matlab部署工具到java包javac错误

    我正在尝试将我的程序包装为与 java 一起使用 我首先尝试了一个简单的 hello world 你好世界 m disp 你好世界 我使用了deploytool并选择了java包 当它到达这一行时 执行命令 javac verbose cl

随机推荐