MATLAB and several command prompt commands

5 views (last 30 days)
Egor Losev
Egor Losev on 12 Jan 2023
Commented: Egor Losev on 15 Jan 2023
Hello,
I have a device which I want to transfer files from through tftp. To do this I'm opening a command prompt and writing
tftp -i 10.0.0.22 get dmafiles-0
This begins the transfer. In total I need to transfer files 0-7.
I'm trying to make MATLAB run these commands for me without locking itself into busy mode.
I can do this if I create a function file with this command and use batch(function) to run this script:
ch = 0:7;
for i=1:length(ch)
command = sprintf('tftp -i 192.168.178.100 get dmafiles-%d', ch(i));
system(command)
end
This will offload the transfer to a different worker and not lock the main MATLAB window. However, this will transfer the files in a serial manner, one after the other. If I open several command prompts, I can transfer several files in parallel.
The issue is that I don't know how to offload each transfer onto a different MATLAB worker, which will then run the transfer of its respective file in a different cmd window.
Should I create 8 functions, each corresponding to its own file, and then batch all of them?
i.e. CH1, CH2, ..., CH8 and then batch(CH1), batch(CH2),..., batch(CH8)
Is there a better way?
In short, the issue is - open several command prompts and run a command in each. Works when done manualy, looking into how to implement in MATLAB.

Answers (2)

Jan
Jan on 12 Jan 2023
Edited: Jan on 12 Jan 2023
Try this under Windows:
for i = 0:7
command = sprintf('tftp -i 192.168.178.100 get dmafiles-%d && exit &', i);
% ^^^^^^^^^
system(command)
end
For Linux, use ; instead of &&.
  1 Comment
Egor Losev
Egor Losev on 12 Jan 2023
I'm on windows.
This works, but it opens a cmd windows for each transfer process. Is there a way to transfer "silently"?
I have tried with the way I mentioned - doing batch in a for loop on 8 functions, and in each function there is a respective dmafiles-0-8 transfer. While not pretty, it does work in the background.
Your way is much neater, but opens 8 cmd windows.

Sign in to comment.


Walter Roberson
Walter Roberson on 12 Jan 2023
For Windows use System.Diagnostics.Process to create the transfer processes. You can invoke tftp directly without creating a command window, and you have control over the output stream.
  1 Comment
Egor Losev
Egor Losev on 15 Jan 2023
Hello,
I'm trying the following:
for i = 0:7
Process = System.Diagnostics.Process();
command = sprintf('tftp -i 10.0.0.22 get dmafiles-%d', i);
Process.Start(command);
end
but it doesn't run, gives the following error:
Message: The system cannot find the file specified
Source: System
HelpLink: None

Sign in to comment.

Categories

Find more on External Language Interfaces in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!