Как переименовать файл матлаб
Я хочу запустить этот 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);"- Запустите командную строку.
- Войдите в папку, содержащую файл .m с cd C:\M1\M2\M3
- Выполните следующее: 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 Научная библиотека
Копирование информации со страницы разрешается только с указанием ссылки на данный сайт
Читайте также: