Как передать имя файла в качестве аргумента при вызове файла .BAT

838
Kaji

В последнее время я немного занимался с DOSbox, и одна из моих задач заключалась в том, чтобы настроить серию пакетных файлов для вызовов, чтобы сэкономить несколько cdсекунд. Типичный файл .bat может выглядеть следующим образом:

cd wolf3d wolf3d -goobers cd .. 

Одна вещь, которая немного раздражает, - это отсутствие встроенного текстового редактора, который я могу использовать, например, Pico / Nano. Тем не менее, у меня действительно установлен QBASIC, поэтому одним из вариантов, который я рассматривал, была настройка, чтобы я мог сделать вызов, такой как следующий:

nano filename.bat 

и это откроет файл в QBASIC.

Я немного прочитал о том, как работает пакетный скриптинг, и кажется, что достаточно просто добавить a %1в скрипт, например, следующее:

cd qbasic qbasic %1 cd .. 

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

Я пытался найти то, что мне здесь не хватает, но это кажется слишком загадочным, чтобы легко его найти. Кто-нибудь может указать, что здесь не хватает?

Спасибо!

0
[DOS и Windows cmd - это не одно и то же] (https://superuser.com/q/451432/241386). Отсюда и многое другое https://scalibq.wordpress.com/2012/05/23/the-windows-command-prompt-is-not-a-dos-prompt/ phuclv 7 лет назад 0
Если вы измените текущий каталог в пакете, вы должны указать в качестве аргумента диск: \ path \ name.ext, в противном случае Qbasic не сможет найти файл и создаст новый в текущей текущей папке. LotPings 7 лет назад 1
@LotPings При его вызове я использовал путь относительно скрипта, полагая, что даже если в файле есть `cd`, он все равно поймает правильный путь при получении начального значения переменной. Итак, я полагаю, вы предлагаете что-то вроде `qbasic .. \% 1` для второй строки? Я не в том месте, чтобы проверить это прямо сейчас, но как только я вернусь к своему столу, я попробую. Это определенно имеет большой смысл, теперь, когда вы на это указали. Kaji 7 лет назад 0
@LotPings Вот и все! Если вы можете опубликовать свой комментарий в качестве ответа, я приму его. Kaji 7 лет назад 0

2 ответа на вопрос

1
LotPings

Чтобы уточнить немного, как в моем комментарии:

  • Если передать относительный путь в качестве аргумента в пакет, который сам изменяет текущую папку, произойдет сбой, если передача не относится к новой папке.
  • В качестве альтернативы передать абсолютный проход
  • или не меняйте текущую папку, если в этом нет необходимости. Qbasic - это отдельный .exeфайл, который может быть куда-то доступен через путь. Чтобы использовать его в качестве редактора, есть /Editorопция (только что проверил это в VDOS Plus - производная от DosBOX)

Так что измените ваш nano.bat на

@Qbasic.exe /Editor %1 

при условии, что Qbasic.exe доступен через папку в пути.

0
AlwaysLearning

Попробуйте двойной процент, т.е. %% 1. Пакетные файлы в DOS не совсем соответствуют тем же правилам, что и их эквиваленты в DOS.

В итоге открылся пустой файл `% 1.BAS` в QBASIC. Я попытался уменьшить его до% 1, и на этот раз получилось `NANO.BAT`, однако это новый пустой файл вместо того, который мы пытаемся обновить. Однако `qbasic ../ nano.bat` правильно открывает файл, если я сначала хочу перейти в` / qbasic`. Kaji 7 лет назад 0
Забавно, что он открывает файл с именем nano.bas. Заставляет меня задуматься, не является ли% 1 в поле dos не первым аргументом пакетного задания, а именем самого пакетного задания. Что произойдет, если вы используете% 2? AlwaysLearning 7 лет назад 0
Небольшая коррекция, это создает пустой `nano.baT`, а не` .baS`; моя ошибка в первом посте. Изменение его на `% 2` приводит к тому, что файл не создается, как простой запуск` qbasic`. Kaji 7 лет назад 0