解决MATLAB不能设置为.m文件默认打开方式

转载:https://blog.csdn.net/yujiaerzong/article/details/77624167

  1. 将下面代码复制保存为 associateFiles.m 文件。
    或者从下面链接下载文件https://ww2.mathworks.cn/matlabcentral/fileexchange/51165-matlab-file-association-fix

  2. 在MATLAB中运行 associateFiles.m 文件,即在命令行中输入 associateFiles 然后 回车。

  3. 步骤2程序运行生成文件 MatlabFileAssocFix.reg 。

  4. 关闭MATLAB,双击运行 MatlabFileAssocFix.reg,会提示添加注册表信息,同意。

可以才去在bin目录中选择以管理员身份运行
MatlabFileAssocFix.reg文件就在matlab安装文件夹的bin目录中

  1. 设置.m文件默认打开程序为MATLAB2016a 完工。

function associateFiles(action, userExtList, fileStr)

% associateFiles(action, extList, fileStr)
%
% Makes a registry files that can be used to set correct file associantions on
% a windows platform. The following MATLAB file extensions are supported:
% .m, .mat, .fig, .mexw32, .mexw64, .p, .mdl, .mdlp, .slx, .mldatx, .req,
% .sldd, .slddc, .slxp, .sltx, .mn, .mu, .muphlp, .xvc, .xvz, .ssc, .mlapp,
% .mlappinstall, .mltbx, .mlpkginstall, .mlprj
%
% INPUT:
% action - optional string.
% * ‘add’ (default) adds/rewrites the MATLAB file association registry
% keys for this version.
% * ‘delete’ deletes the MATLAB file association registry entries for
% ALL versions of MATLAB (including “old style” ones)
% * ‘deleteadd’ is the same as ‘delete’ followed by ‘add’
% extList - optional string or cell array of strings containing the file
% extensions that should be associated with this version. Default is
% all MATLAB file extension (see above).
% fileStr - optional string with the name of the registry file to be written
% (possibly including path). Default is the file
% ‘MatlabFileAssocFix.reg’ in the current directory.
%
% USAGE:
% 1) Run with desired options (see above). A registry file should have been
% created.
% 2) Exit all running instances of MATLAB.
% 3) Make a backup copy of the windows registry if you need to restore the
% changes, see https://support.microsoft.com/en-us/kb/322756
% 4) Double click on the created file (possibly need to enter a password) and
% confirm.
% 5) Restart Windows (or explorer.exe).
% 6) The MATLAB files should now be associated with the MATLAB version that the
% registry file was created in and e.g. m-files should be opened in an
% already running instance of MATLAB.
%
% EXAMPLES:
% * associateFiles(‘deleteadd’) - Makes a registry files that deletes all
% previous MATLAB file association registry keys and write new ones that
% associates all MATLAB files with the MATLAB version that the registry file
% was created in.
% * associateFiles(’’, {’.m’, ‘.mat’, ‘.fig’}, ‘myFile’) - Makes a registry file
% “myFile.reg” that associates m-, mat- and fig-files with the MATLAB version
% that the registry file was created in.
%
% VERSION 1.0

% Defualt input
if (nargin < 1 || isempty(action))
action = ‘add’;
end
if (nargin < 2)
userExtList = {};
end
if (nargin < 3)
fileStr = ‘’;
end
if (~iscell(userExtList))
if (isempty(userExtList))
userExtList = {};
else
userExtList = {userExtList};
end
end

% Sanity check
if (~ischar(action) || (~strcmpi(action, ‘add’) && …
~strcmpi(action, ‘delete’) && ~strcmpi(action, ‘deleteadd’)))
error(‘The action to perform must be ‘‘add’’, ‘‘delete’’ or ‘‘deleteadd’’!’)
end
if (~isempty(userExtList) && ~min(cellfun(@ischar, userExtList)))
error(‘The file extension list must be a string or a cell array of strings!’)
end
if (~ischar(fileStr))
error(‘The file to write to must be a string!’)
end

% Get the currently running MATLAB version
verStr = regexp(version, ‘(\d*?.\d*?.\d*?).’, ‘tokens’);
verStr = verStr{1}{1};
verNum = str2double(regexprep(verStr, ‘(\d*?.\d*)[\x0000-\xffff]’, ‘$1’));
verHex = sprintf(‘x’, str2double(regexprep(verStr, …
'(\d
?).[\x0000-\xffff]’, ‘$1’)), str2double(regexprep(verStr, …
'\d
?.(\d*?).[\x0000-\xffff]*’, ‘$1’)));

% Get 32/64-bit
arch = computer;
switch arch
case ‘PCWIN’
binFolder = ‘win32’;
case ‘PCWIN64’
binFolder = ‘win64’;
end
binPath = fullfile(matlabroot, ‘bin’, binFolder);

% Known MATLAB files with possible DDE actions
fileExtCell = {…
‘fig’ , ‘MATLAB Figure’ , ‘-62’ , …
{‘Open’, ‘uiopen(’’%1’’,1)’} , [] ; …
‘m’ , ‘MATLAB Code’ , ‘-58’ , …
{‘Open’, ‘uiopen(’’%1’’,1)’} , {‘Run’, ‘run(’’%1’’)’} ; …
‘mat’ , ‘MATLAB Data’ , ‘-59’ , …
{‘Load’, ‘load(’’%1’’)’ } , {‘Open’, ‘uiimport(’’%1’’)’}; …
‘mdl’ , ‘Simulink Model’ , ‘-61’ , …
{‘Load’, ‘uiopen(’’%1’’,1)’} , [] ; …
‘mdlp’ , ‘Simulink Protected Model’ , ‘-72’ , …
[] , [] ; …
‘mexw32’, ‘MATLAB MEX’ , ‘-63’ , …
[] , [] ; …
‘mexw64’, ‘MATLAB MEX’ , ‘-63’ , …
[] , [] ; …
‘mn’ , ‘MuPAD Notebook’ , ‘-66’ , …
{‘Open’, ‘mupad(’’%1’’)’} , [] ; …
‘mu’ , ‘MuPAD Code’ , ‘-67’ , …
{‘Open’, ‘uiopen(’’%1’’,1)’} , [] ; …
‘muphlp’, ‘MuPAD Help’ , ‘-68’ , …
{‘Open’, ‘doc(symengine, ‘’%1’’)’} , [] ; …
‘p’ , ‘MATLAB P-code’ , ‘-60’ , …
[] , [] ; …
‘slx’ , ‘Simulink Model (SLX format)’, ‘-73’ , …
{‘Open’, ‘uiopen(’’%1’’,1)’} , [] ; …
‘ssc’ , ‘Simscape Model’ , ‘-65’ , …
{‘Open’, ‘uiopen(’’%1’’,1)’} , [] ; …
‘xvc’ , ‘MuPAD Graphics’ , ‘-69’ , …
{‘Open’, ‘mupad(’’%1’’)’} , [] ; …
‘xvz’ , ‘MuPAD Graphics’ , ‘-70’ , …
{‘Open’, ‘mupad(’’%1’’)’} , [] ; …
‘mlapp’ , ‘MATLAB Application’ , [] , [], [] ; …
‘mltbx’ , ‘MATLAB Toolbox’ , [] , [], [] ; …
‘mldatx’ , ‘Simulink Scenario’ , [] , [], [] ; …
‘req’ , ‘Simulink Requirements Link’ , [] , [], [] ; …
‘sldd’ , ‘Simulink Dictionary’ , [] , [], [] ; …
‘slddc’ , ‘Simulink Dictionary’ , [] , [], [] ; …
‘mlappinstall’, ‘MATLAB Application’ , [] , [], [] ; …
‘mlpkginstall’, ‘MATLAB Support Package’ , [] , [], [] ; …
‘slxp’ , ‘Simulink Protected Model Package’, [] , [], [] ; …
‘sltx’ , ‘Simulink Template’ , [] , [], [] ; …
‘mlprj’ , ‘MATLAB Project’ , [] , [], []};

% Possibly trim list
if (~isempty(userExtList))
fileExtCell = fileExtCell(ismember(fileExtCell(:, 1), …
regexprep(userExtList, ‘.’, ‘’)), 😃;
end

% Make registry file
if (~isempty(fileStr))
% Possibly add file extension
[~, ~, tmp] = fileparts(fileStr);
if (isempty(tmp))
fileStr = [fileStr, ‘.reg’];
end
fid = fopen(fileStr, ‘w’);
else
fid = fopen(‘MatlabFileAssocFix.reg’, ‘w’);
end
if (fid == -1)
error(‘Failed to create registry file’)
end
% Write intial lines
fprintf(fid, ‘%s\r\n\r\n’, ‘Windows Registry Editor Version 5.00’);
fprintf(fid, ‘%s\r\n\r\n’, ‘;FIXES MATLAB FILE ASSOCIATIONS’);

% REMOVE OLD KEYS
explorerKey = [‘HKEY_CURRENT_USER\Software\Microsoft\Windows’, …
‘CurrentVersion\Explorer\FileExts’];
% Iterate over file extensions
for fileExtNo = 1 : size(fileExtCell, 1)
rmKeys = {};
fileExt = fileExtCell{fileExtNo, 1};

% File extension keys
[status, result] = dos([‘reg query HKEY_CLASSES_ROOT /f .’, fileExt, …
’ /k /e’]);
if (~status)
keys = regexp(result, ‘(HKEY_CLASSES_ROOT[\x0000-\xffff]*?)\n’, ‘tokens’);
rmKeys = [rmKeys, keys{:}];
end

% Old style keys without version numbers
if (~strcmpi(fileExt, ‘mexw64’))
% Uses single DDE key for mex files
if (strcmpi(fileExt, ‘mexw32’))
fileExtTmp = ‘mex’;
else
fileExtTmp = fileExt;
end
[status, result] = dos(['reg query HKEY_CLASSES_ROOT /f ', …
fileExtTmp, ‘file /k /e’]);
if (~status)
keys = regexp(result, ‘(HKEY_CLASSES_ROOT[\x0000-\xffff]*?)\n’, …
‘tokens’);
rmKeys = [rmKeys, keys{:}];
end
end

% New style keys with version number
if (strcmpi(action, ‘add’))
% Only remove keys related to this version
[status, result] = dos([‘reg query HKEY_CLASSES_ROOT /f MATLAB.’, …
fileExt, ‘.’, verStr ’ /k’]);
else
% Remove keys related to ALL version
[status, result] = dos([‘reg query HKEY_CLASSES_ROOT /f MATLAB.’, …
fileExt, ‘. /k’]);
end
if (~status)
keys = regexp(result, ‘(HKEY_CLASSES_ROOT[\x0000-\xffff]*?)\n’, ‘tokens’);
rmKeys = [rmKeys, keys{:}];
end

% Explorer keys
[status, result] = dos([‘reg query ‘, explorerKey, ’ /f .’, fileExt, …
’ /k /e’]);
if (~status)
keys = regexp(result, ‘(HKEY_CURRENT_USER[\x0000-\xffff]*?)\n’, ‘tokens’);
rmKeys = [rmKeys, keys{:}];
end

% Write to file
if (~isempty(rmKeys))
fprintf(fid, ‘%s\r\n\r\n’, [’;REMOVES ‘, upper(fileExt), …
’ FILE ASSOCIATIONS’]);
for keyNo = 1 : length(rmKeys)
key = rmKeys{keyNo};
fprintf(fid, ‘%s\r\n\r\n’, [’[-’, key, ‘]’]);
end
end
end

% ADD KEYS
if (~strcmpi(action, ‘delete’))
% Get text Persistent Handler
[status, result] = dos(…
‘reg query HKEY_CLASSES_ROOT.txt\PersistentHandler /ve’);
if (~status)
PersistentHandler = regexp(result, ‘{[\x0000-\xffff]*?}’, ‘match’);
PersistentHandler = PersistentHandler{1};
else
PersistentHandler = ‘’;
end
% DDE call
ddeCall = ‘ShellVerbs.Matlab’;
if (verNum > 8)
% Changed from R2013a
ddeCall = [ddeCall, ‘.’, verStr];
end
% Default icon
defIcon = ‘m’;
if (~exist(fullfile(binPath, ‘m.ico’), ‘file’))
defIcon = ‘’;
end
% Path to MATLAB binary directory with \
binPathStr = regexprep(binPath, ‘\’, ‘\\’);

% Write Shell Open key
key = [’[HKEY_CLASSES_ROOT\Applications\MATLAB.exe\shell\open’, …
‘\command]%r’, ‘@=""’, binPathStr, ‘\MATLAB.exe" “%1"”%r%r’];
fprintf(fid, ‘%s\r\n\r\n’, ‘;ADD SHELL OPEN’);
lines = regexp(key, ‘([\x0000-\xffff]*?)%r’, ‘tokens’);
for lineNo = 1 : length(lines)
fprintf(fid, ‘%s\r\n’, lines{lineNo}{1});
end

% Iterate over file types
for fileExtNo = 1 : size(fileExtCell, 1)
fileExt = fileExtCell{fileExtNo, 1};

% File extension keys
key  = ['[HKEY_CLASSES_ROOT\.', fileExt, ']%r@="MATLAB.', fileExt, '.', ...
  verStr, '"%r'];
if (strcmpi(fileExt, 'm') && ~isempty(PersistentHandler))
  % Add some values
  key = [key, '"Content Type"="text/plain"%r', ...
    '"PerceivedType"="Text"%r'];
end
key = [key, '%r'];
key = [key, '[HKEY_CLASSES_ROOT\.', fileExt, ...
  '\OpenWithProgids]%r"MATLAB.', fileExt, '.', verStr, '"=""%r%r'];
if (strcmpi(fileExt, 'm') && ~isempty(PersistentHandler))
  key = [key, '[HKEY_CLASSES_ROOT\.', fileExt, ...
    '\PersistentHandler]%r@="', PersistentHandler, '"%r%r'];
end
key  = [key, '[HKEY_CLASSES_ROOT\.', fileExt, ...
  '\Versions\MATLAB.', fileExt, '.' verStr, ']%r"FileVersionMS"=dword:', ...
  verHex, '%r"FileVersionLS"=dword:00000000%r%r'];

% DDE keys
ddeData = fileExtCell(ismember(fileExtCell(:, 1), fileExt), :);
key = [key, '[HKEY_CLASSES_ROOT\MATLAB.', fileExt, '.' verStr, ...
  ']%r@="', ddeData{2}, '"%r'];
if (~isempty(ddeData{3}))
  key = [key, '"FriendlyTypeName"="@', binPathStr, '\\matlab.exe', ...
    ',', ddeData{3}, '"%r'];
end
key = [key, '%r'];
% Icon
icon = fileExt;
if (~exist(fullfile(binPath, [icon, '.ico']), 'file'))
  icon = defIcon;
end
if (~isempty(icon))
  key = [key, '[HKEY_CLASSES_ROOT\MATLAB.', fileExt, '.' verStr, ...
    '\DefaultIcon]%r@="', binPathStr, '\\', icon, '.ico,0"%r%r'];
end
% Shell actions
for shellActionNo = 4:5
  ddePar = ddeData{shellActionNo};
  if (~isempty(ddePar))
    key = [key, '[HKEY_CLASSES_ROOT\MATLAB.', fileExt, '.' verStr, ...
      '\Shell\', ddePar{1}, ']%r@="', ddePar{1}, '"%r%r'];
    key = [key, '[HKEY_CLASSES_ROOT\MATLAB.', fileExt, '.' verStr, ...
      '\Shell\', ddePar{1}, '\command]%r@="\"', binPathStr, ...
      '\\matlab.exe\""%r%r'];
    key = [key, '[HKEY_CLASSES_ROOT\MATLAB.', fileExt, '.' verStr, ...
      '\Shell\', ddePar{1}, '\ddeexec]%r@="', ddePar{2}, '"%r%r'];
    key = [key, '[HKEY_CLASSES_ROOT\MATLAB.', fileExt, '.' verStr, ...
      '\Shell\', ddePar{1},'\ddeexec\application]%r@="', ...
      ddeCall, '"%r%r'];
    key = [key, '[HKEY_CLASSES_ROOT\MATLAB.', fileExt, '.' verStr, ...
      '\Shell\', ddePar{1},'\ddeexec\topic]%r@="system"%r%r'];
  end
end

% Explorer keys
key = [key, '[', explorerKey, '\.', fileExt, '\OpenWithProgids]%r'];
if (strcmpi(fileExt, 'm'))
  key = [key, '"m_auto_file"=hex(0):%r'];
end
key = [key, '"MATLAB.', fileExt, '.',  verStr, '"=hex(0):%r%r'];
if (~isempty(ddeData{4}))
  % Add key
  key = [key, '[', explorerKey, '\.', fileExt, ...
    '\OpenWithList]%r"a"="MATLAB.exe"%r"MRUList"="a"%r%r'];
else
  key = [key, '[', explorerKey, '\.', fileExt, '\OpenWithList]%r%r'];
end
% Write to file
fprintf(fid, '%s\r\n\r\n', [';ADD ', upper(fileExt), ...
  ' FILE ASSOCIATIONS']);
lines = regexp(key, '([\x0000-\xffff]*?)%r', 'tokens');
for lineNo = 1 : length(lines)
  fprintf(fid, '%s\r\n', lines{lineNo}{1});
end

end

end

% Cloese file
fclose(fid);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值