MATLAB Answers


Matlab and batch file

Asked by Aleksander
on 11 May 2013


-i am not the most experienced matlab programer how ever, i am trying to exploite an batch script that i have previously writen.

by using uigetfile i will get an array of file names in Filnames i.e test.txt test2.txt test3.txt

i wish to pass this along to the batch script. and have tried !C:\test.bat Filnames(:,1) Filnames(:,2) Filnames(:,3)

but the batch script only recive the text as above: Echo Filnames(:,1) ......

any solultion to pass the found filname to an batch script ?


Log in to comment.


No products are associated with this question.

2 Answers

Answer by per isakson
on 11 May 2013

I would do it this way

    cmd = sprintf( 'c:\\test.bat %s %s %s', file(:,1), file(:,2), file(:,3) );
    msg = dos( cmd );

because that allows me to inspect cmd. I can even copy&paste cmd to the Command Prompt and check that it works.

Replace dos by system if you are on Unix.


This is an possible solution. however since my code is per now like this:

[Filename,Filepath] = uigetfile({'*.txt','LOG FILES,(*.txt)'},'SELECT LOG FILE(S)','C:\','Multiselect','on')

-when you select multiple files thee filenames are resturned in an cell array, which sprintf does not accept.

i am considering to drop the file names in an text file using dlmwirte and then have the batch file read the text file.

I just copied from the code you showed.

Either you handle the list of files in the bat-file or in Matlab, whichever is more convenient.

Log in to comment.

Answer by Image Analyst
on 11 May 2013


Thanks. seens intresting, all do not sure directly how to implement it, as i want to use "uigetfile". al do i ihave thought about an function where the user only points to a folder an all files within are processed.

Try this code, which I adapted from the FAQ by inserting your code before it:

startingFolder = fullfile(matlabroot, '\toolbox\images\imdemos');
[baseFileNames, chosenFolder] = uigetfile({'*.*','All Files,(*.*)'},'SELECT LOG FILE(S)',...
for k = 1:length(baseFileNames)
	baseFileName = baseFileNames{k};
	fullFileName = fullfile(chosenFolder, baseFileName);
	message = sprintf('Now processing %s', fullFileName);
	fprintf('\n%s\n', message);
	promptMessage = sprintf('%s\n\nDo you want to Continue processing,\nor Cancel to abort processing?', message);
	titleBarCaption = 'Continue?';
	button = questdlg(promptMessage, titleBarCaption, 'Continue', 'Cancel', 'Continue');
	if strcmpi(button, 'Cancel')

hi. thanks for the help :) this is the solution i came up with.

    % code
[Filenames,Filepath] = uigetfile({'*.*','LOG FILES ,(*.*)'},'SELECT... LOGFILE(S)','C:\','Multiselect','on');
m = max(size(Filenames));
 mm = (m)-1
 %print single filname only:
 if (m==11)
    basefilename = [Filenames] 
%print several found file names to a text file.
 Filenames = sort(Filenames);
 basefilename = [''] ;
   for k = 1:length(Filenames);
   Filename = Filenames{k};
     if (mm==(k)-1)
         basefilename = [basefilename Filename];
       basefilename = [basefilename Filename '+'];

Log in to comment.

Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!