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

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

Matlab and batch file

Asked by Aleksander on 11 May 2013

Hi.

-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 ?

0 Comments

Aleksander

Products

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.

2 Comments

Aleksander on 12 May 2013

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.

per isakson on 12 May 2013

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.

per isakson
Answer by Image Analyst on 11 May 2013

3 Comments

Aleksander on 12 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.

Image Analyst on 12 May 2013

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)',...
	startingFolder,'Multiselect','on')
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')
		return;
	end
	
end
Aleksander on 22 May 2013

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] 
   else  
%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];
       else
       basefilename = [basefilename Filename '+'];
      end
    end
 end 
Image Analyst

Contact us