Как переименовать файл матлаб

Обновлено: 04.07.2024

Я хочу запустить этот m-файл с помощью Matlab из командной строки, например, внутри файла .bat. Как я могу это сделать, есть ли способ это сделать?

Подобная команда успешно запускает m-файл:

"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m'); exit;"

Было бы хорошо, если бы вы добавили команду «exit» в конце, чтобы ваш ответ был более практичным и полезным. Одиночные и двойные кавычки внутри и вокруг команды "run" важны! Поддерживает ли версия для Windows параметр -nodesktop? Я думал, что нет, но может ошибаться.

Я думаю, что один важный момент, который не был упомянут в предыдущих ответах, заключается в том, что, если это явно не указано, интерпретатор Matlab останется открытым. Поэтому к ответу @hkBattousai добавлю exit команду:

"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');exit;"

По какой-то причине, если mfile.m вызывает ошибку, явная exit функция никогда не вызывается, заставляя весь процесс ждать .

Вот что я бы использовал вместо этого, чтобы изящно обрабатывать ошибки из скрипта:

Если вы хотите больше подробностей:

Я нашел оригинальную ссылку здесь . Поскольку исходной ссылки больше нет, вот ссылка на альтернативную программу чтения, которая все еще существует:

он печатает, matlab exit code: 1 если сценарий генерирует исключение, в matlab exit code: 0 противном случае.

Чтобы отобразить ошибку, как это делал бы MATLAB, когда ее не улавливали, просто сделайте это "try, run('/foo/bar/my_script.m'), catch e, disp(getReport(e)), exit(1), end, exit(0);"
  1. Запустите командную строку.
  2. Войдите в папку, содержащую файл .m с cd C:\M1\M2\M3
  3. Выполните следующее: C:\E1\E2\E3\matlab.exe -r mfile

Системы Windows будут использовать вашу текущую папку в качестве местоположения для MATLAB для поиска файлов .m, и -r опция пытается запустить данный файл .m, как только происходит запуск.

Он не работает внутри файла .bat. Я привел это в качестве примера. Собственно, я буду запускать его функцией Win32 API CreateProcessW() .

И я использую Ubuntu

Кроме того, я напечатал имя файла, так как эта компиляция является частью пакетного сценария, который вызывает Matlab.

Для ложного имени модели, переданного в метод генерации устаревшего кода, результат будет выглядеть так:

Наконец, чтобы отобразить вывод в окне командной строки Windows, просто зарегистрируйте консоль matlab в файл с помощью -logfile logfile.txt (используйте дополнительно -wait ) и вызовите пакетную команду type logfile.txt

Начиная с R2019b, появился новый параметр командной строки -batch . Он заменяет -r , что больше не рекомендуется. Он также унифицирует синтаксис для разных платформ. См., Например, документацию для Windows , для других платформ описание идентично.

Это запускает MATLAB без рабочего стола или экрана-заставки, регистрирует весь вывод в stdout и stderr , выходит автоматически, когда оператор завершается, и предоставляет код выхода, сообщающий об успехе или ошибке.

Таким образом, больше нет необходимости использовать try / catch вокруг кода для запуска, и больше нет необходимости добавлять exit оператор.

Я запускаю эту команду в сценарии bash, в частности, для отправки заданий SGE и пакетной обработки:

Я хочу сохранить несколько изображений после их обработки. Я хочу, чтобы имя было оригинальным изменением имени, чтобы выглядеть так. Если исходное изображение было названо '1', а затем я хочу повернуть изображение на 90 градусов, я хочу, чтобы новое имя было "1_90.jpg".

Использование этого кода

Таков результат. Почему .jpg появляется перед %d? как я могу правильно получить заказ?

2 ответа

У меня есть существующий файл в моем HDD, и я хочу переименовать этот файл.

Как я могу переименовать файл на платформе unix программно, не используя стандартную функцию переименования?

Чтобы получить часть имени файла "name" без расширения, используйте fileparts . Это также позволяет повторно использовать один и тот же код, например, для jpg или других файлов изображений, используя переменную для расширения вместо записи ".jpg".

Спасибо Даниэлю и Насеру. Я понял, насколько глуп этот вопрос -_-. Все еще новичок в этом.

Похожие вопросы:

У меня есть папка 'a' с примерно 200 файлами с именами xx_out_02.csv, и я хочу переименовать их в xx_out.csv. Возможно, он использует Matlab или запускает какой-то скрипт. Я попробовал это сделать в.

Как я могу переименовать файл в install4j? У меня есть шаг, чтобы выбрать файл по пользователю, и если пользователь загружает файл с другим именем, то x.txt мне нужно переименовать его обратно с.

Мне нужен VBScript, который находит самый последний файл в папке и переименовывает его. Мне удалось написать сценарий так, чтобы он находил самый последний файл. Однако я не могу понять, как.

У меня есть существующий файл в моем HDD, и я хочу переименовать этот файл.

Как я могу переименовать файл на платформе unix программно, не используя стандартную функцию переименования?

Я загружаю 10 000 файлов изображений с интернет-сайта и сохраняю их в папке, чтобы использовать в своем проекте (система поиска изображений ), теперь мне нужно переименовать файл изображения в.

Может ли кто-нибудь сказать, существует ли способ переименовать переменную в каждой итерации цикла в MATLAB? На самом деле я хочу сохранить переменную в цикле с другим именем, включающим индекс.

Я работаю над графическим интерфейсом с руководством в matlab. В промежутке я разделился, чтобы назвать файл по-другому, и переименовал его. Я также переименовал все функции в новое имя файла в.

Теперь я использую grunt, за что очень благодарен, потому что это очень удобно. Однако мой босс сказал, что он хочет переименовать файл Gruntfile.js, потому что это сбивает с толку. Он хочет.

Я пытаюсь переименовать jpg - файл окна, но не могу этого сделать. Файл находится в подпапке. rename %cd%\Set\1.jpg %cd%\Set\3.jpg Синтаксис команды неверен.

Создание программ часто предполагает сохранение результатов расчетов в файлы для их дальнейшего анализа, обработки и хранения. В связи с этим в среде MATLAB реализованы различные функции по работе с файлами, содержащие данные в разных форматах.

Для загрузки данных из файла,расположенного на локальном диске в рабочую средуMATLAB, используются следующие операторы:load, freadиfscanf. Для сохранения данных из рабочей среды MATLAB в файл на локальном диске предусмотрено использование следующих операторов: save, fwrite, fprintf.

В самом простом случае для сохранения и последующей загрузки каких-либо данных в среде MATLAB предусмотрены следующие функции, соответственно: save и load, имеющие следующий синтаксис:

save<имя файла><имена переменных>

load<имя файла><имена переменных>

Функция save позволяет сохранять произвольные переменные, используемые в программе в файл, который будет по умолчанию располагаться в рабочем каталоге (обычно поддиректория work) и иметь расширение mat. Соответственно функция loadпозволяет загрузить из указанного mat-файла ранее сохраненные переменные.

Недостатком функций save и load является то, что они работают с определенными форматами файлов (обычно mat-файлы) и не позволяют загружать или сохранять данные в других форматах. Между тем бывает необходимость загружать информацию, например, из бинарных файлов, созданных другими программными продуктами для дальнейшей обработки результатов в среде MATLAB. С этой целью в среде MATLAB предусмотрены следующие функции

fwrite(<идентификатор файла>, <переменная>, <тип данных>)

<переменная>=fread(<идентификатор файла>, <размер>, <точность>)

где: <идентификатор файла>– это указатель на файл, с которым предполагается работать. Для того, чтобы получить идентификатор файла, используется функция fopen, имеющая следующий синтаксис:

<идентификатор файла>=fopen(<имя файла>,<режим работы>)

где: параметр <режим работы> может принимать значения, приведенные в таблице 1.

В том случае, если функция fopen() по каким-либо причинам не может корректно открыть файл, то она возвращает значение –1. После выполнения всех файловых операций файл должен быть закрыт с помощью функции fcloseследующей структуры:

fclose(<идентификатор файла>)

С помощью команды fclose(all)можно закрыть сразу все открытые файлы, кроме стандартных системных файлов.

Пример использования функций работы с файлами:

A=[1 2 3 4 5];

fid=fopen('my_file.dat', 'wb');% открытие файла на запись

fwrite(fid, A, 'double');% запись матрицы А в файл

fclose(fid);% закрытие файла
B=fread(fid, 5, 'double'); % чтение 5 значений в формате double
disp(B); % отображение на экране
fclose(fid); % закрытие файла

В результате выполнения данных операций в рабочем каталоге MATLABбудет создан файл my_file.dat размером 40 байт, в котором будут содержаться 5 значений типа double, записанных в виде последовательности байт (по 8 байт на каждое значение). Функция fread() считывает последовательно сохраненные байты и автоматически преобразовывает их к типу double, т.е. каждые 8 байт интерпретируются как одно значение типа double.

В приведенном примере в явном виде указывалось число элементов для считывания из файла. Однако, часто общее количество элементов бывает неизвестным, либо изменяется в процессе работы программы. В этом случае необходимо считывать данные из файла до тех пор, пока не будет достигнут его конец. В MATLAB существует функция для проверки достижения конца файла,которая возвращает 1 при достижении конца файла и 0 в других случаях и имеет следующий синтаксис:

feof(<идентификатор файла>)

Таблица 1 - Режимы работы с файлами в среде MATLAB при использовании функции fopen

Значение параметра <режим работы> Описание параметра
'r' чтение
'w' запись (стирает предыдущее содержимое файла)
'a' добавление (создает файл, если его нет)
'r+' чтение и запись (не создает файл, если его нет)
'w+' чтение и запись (очищает прежнее содержимое или создает файл, если его нет)
'a+' чтение и добавление (создает файл, если его нет)
'b' дополнительный параметр, означающий работу с бинарными файлами, например, ‘wb’, ‘rb’ ‘rb+’, ‘ab’

Описанные ранее функции работы с файлами позволяют записывать и считывать информацию по байтам, которые затем требуется правильно интерпретировать для преобразования их в числа или строки. В то же время выходными результатами многих программ являются текстовые файлы, в которых явным образом записаны те или иные числа или текст. Прочитать такой файл побайтно, а затем интерпретировать полученные данные довольно трудоемкая задача, поэтому для этих целей были специально разработаны функции форматированного чтения или записи информации: fscanf и fprintf, соответственно.




Функция чтения fscanfимеет следующий синтаксис:

[value, count]=fscanf(fid, format, size)

где: value – результат считывания данных из файла; count – число прочитанных (записанных) данных; fid – указатель на файл; format – формат чтения (записи) данных; size – максимальное число считываемых данных

Функция записиfprintfимеет следующий синтаксис:

count=fprintf(fid, format, a,b. )

где:a,b,… – переменные для записи в файл.

Таблица 2- Список основных спецификаторов параметра formatдля функций fscanf() и fprintf()

Спецификатор Описание
%d целочисленные значения
%f вещественные значения
%s строковые данные
%c символьные данные
%u беззнаковые целые значения

В форматной строке могут бытьтакже использованы различные управляющие символы:

\r – возврат каретки;

\t – горизонтальная табуляция;

\n – переход на новую строку

С помощью функции fprintf() можно осуществлять запись разнородных данных в файл в требуемом формате, в том числе и строковых переменных, что позволяет размещать в файле различные текстовые надписи.

Недостатком рассмотренных функций save и load является то, что они работают с определенными форматами файлов (обычно mat-файлы) и не позволяют загружать или сохранять данные в других форматах. Между тем бывает необходимость загружать информацию, например, из бинарных файлов, созданных другими программными продуктами для дальнейшей обработки результатов в MatLab. С этой целью были разработаны функции

fwrite(<идентификатор файла>, <переменная>, <тип данных>);

<переменная>=fread(<идентификатор файла>);
<переменная>=fread(<идентификатор файла>, <размер>);
<переменная>=fread(<идентификатор файла>, <размер>, <точность>);

Здесь <идентификатор файла> - это указатель на файл, с которым предполагается работать. Чтобы получить идентификатор, используется функция

<идентификатор файла> = fopen(<имя файла>,<режим работы>);

где параметр <режим работы> может принимать значения, приведенные в табл. 5.1.

Если функция fopen() по каким-либо причинам не может корректно открыть файл, то она возвращает значение -1. Ниже представлен фрагмент программы записи и считывания данных из бинарного файла:

fid = fopen('my_file.dat', 'wb'); % открытие файла на запись
if fid == -1 % проверка корректности открытия
error('File is not opened');
end

fwrite(fid, A, 'double'); % запись матрицы в файл (40 байт)
fclose(fid); % закрытие файла

fid = fopen('my_file.dat', 'rb'); % открытие файла на чтение
if fid == -1 % проверка корректности открытия
error('File is not opened');
end

B = fread(fid, 5, 'double'); % чтение 5 значений double
disp(B); % отображение на экране
fclose(fid); % закрытие файла

В результате работы данной программы в рабочем каталоге будет создан файл my_file.dat размером 40 байт, в котором будут содержаться 5 значений типа double, записанных в виде последовательности байт (по 8 байт на каждое значение). Функция fread() считывает последовательно сохраненные байты и автоматически преобразовывает их к типу double, т.е. каждые 8 байт интерпретируются как одно значение типа double.

В приведенном примере явно указывалось число элементов (пять) для считывания из файла. Однако часто общее количество элементов бывает наперед неизвестным, либо оно меняется в процессе работы программы. В этом случае было бы лучше считывать данные из файла до тех пор, пока не будет достигнут его конец. В MatLab существует функция для проверки достижения конца файла

которая возвращает 1 при достижении конца файла и 0 в других случаях. Перепишем программу для считывания произвольного числа элементов типа double из входного файла.

fid = fopen('my_file.dat', 'rb'); % открытие файла на чтение
if fid == -1
error('File is not opened');
end

B=0; % инициализация переменной
cnt=1; % инициализация счетчика
while

feof(fid) % цикл, пока не достигнут конец файла
[V,N] = fread(fid, 1, 'double'); %считывание одного
% значения double (V содержит значение
% элемента, N – число считанных элементов)
if N > 0 % если элемент был прочитан успешно, то
B(cnt)=V; % формируем вектор-строку из значений V
cnt=cnt+1; % увеличиваем счетчик на 1
end
end
disp(B); % отображение результата на экран
fclose(fid); % закрытие файла

В данной программе динамически формируется вектор-строка по мере считывания элементов из входного файла. MatLab автоматически увеличивает размерность векторов, если индекс следующего элемента на 1 больше максимального. Однако на такую процедуру тратится много машинного времени и программа начинает работать заметно медленнее, чем если бы размерность вектора B с самого начала была определена равным 5 элементам, например, так

Следует также отметить, что функция fread() записана с двумя выходными параметрами V и N. Первый параметр содержит значение считанного элемента, а второй – число считанных элементов. В данном случае значение N будет равно 1 каждый раз при корректном считывании информации из файла, и 0 при считывании служебного символа EOF, означающий конец файла. Приведенная ниже проверка позволяет корректно сформировать вектор значений B.

С помощью функций fwrite() и fread() можно сохранять и строковые данные. Например, пусть дана строка

str = 'Hello MatLab';

которую требуется сохранить в файл. В этом случае функция fwrite() будет иметь следующую запись:

fwrite(fid, str, 'int16');

Здесь используется тип int16, т.к. при работе с русскими буквами система MatLab использует двухбайтовое представление каждого символа. Ниже представлена программа записи и чтения строковых данных, используя функции fwrite() и fread():

fid = fopen('my_file.dat', 'wb');
if fid == -1
error('File is not opened');
end

str='Привет MatLab'; % строка для записи
fwrite(fid, str, 'int16'); % запись в файл
fclose(fid);

fid = fopen('my_file.dat', 'rb');
if fid == -1
error('File is not opened');
end

B=''; % инициализация строки
cnt=1;
while

feof(fid)
[V,N] = fread(fid, 1, 'int16=>char'); % чтение текущего
% символа и преобразование
% его в тип char
if N > 0
B(cnt)=V;
cnt=cnt+1;
end
end
disp(B); % отображение строки на экране
fclose(fid);

Результат выполнения программы будет иметь вид

© 2021 Научная библиотека

Копирование информации со страницы разрешается только с указанием ссылки на данный сайт

Читайте также: