Передать аргументы файла .BAT в исполняемый файл .EXE

332
Francky Leyn

Мне нужен сценарий DOS .bat, который просто передает ВСЕ аргументы в программу .exe.

Например, сценарий DOS main.bat, который вызывает .exe program.exe:

program.exe ???? 

Вопрос в том, что ??? должно быть. Аргументы должны ВСЕМ передаваться в кавычках: если есть имена файлов с пробелами, они должны быть оставлены без изменений. В UNIX / POSIX это называется «массив в кавычках», потому что аргументы образуют массив (ARGV [x]), и каждый аргумент должен быть заключен в кавычки.

0
Привет и добро пожаловать в SuperUser. Мы не являемся сайтом "Пожалуйста, напишите мне сценарий". Если вы поделитесь с нами своим сценарием, мы можем помочь вам понять, почему что-то не работает. Тем не менее, это немного трудно понять вашу цель, и сопровождающий сценарий определенно поможет с этим. LPChip 5 лет назад 0
Основная проблема заключается в том, что существует 2 .exe-файла: один для 32-битной версии и один для 64-битной версии. Давайте назовем их program32.exe и program64.exe. Эти имена не могут быть изменены в данный момент. Тем не менее, я хочу написать общие сценарии, которые вызывают из .exe в зависимости от установки. Мне просто нужно знать, как в DOS вы можете передавать аргументы в кавычках. Мне не нужен настоящий сценарий. Мне нужен 1 лайнер. Например, если я наберу: Francky Leyn 5 лет назад 0
'main.bat "filename with spaces.jpg"', для 64-битной версии это должно быть результатом системного вызова DOS 'program64.exe "filename with spaces.jpg"' Francky Leyn 5 лет назад 0

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

0
LPChip

Вы можете просто использовать% *, чтобы передать все, что было передано в файл .bat чему-либо еще.

Обратите внимание, что если вы передадите «слова с пробелами» в пакетный файл, он будет рассматриваться как 1 параметр в кавычках и передается как таковой. Если вы опустите "", пакет все равно отправит его программе, но программа увидит его как отдельные параметры. Это действительно зависит от того, как вызывается командный файл, чтобы узнать, будут ли эти кавычки там или нет, и если это необходимо. Например, если вы перетащите файл в проводнике на пакетный файл, он добавит для вас кавычки. Если вы набираете вручную из командной строки, это до пользователя, чтобы проверить кавычки.

Так:

program.exe %0 

должно быть достаточно в вашем случае.

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

Пример: здесь я набираю prog, дважды нажимаю tab, затем продолжаю печатать и еще раз нажимаю tab.

C:\>_  C:\>cd prog_ (tab)  C:\>cd "Program Files"_ (tab)  C:\>cd "Program Files (x86)"_  C:\>cd "Program Files (x86)"\Micro_ (tab)  C:\>cd "Program Files (x86)\Microsoft Office"_ (enter)  C:\Program Files (x86)\Microsoft Office>_ 
Если у вас есть скрипт .bat, должен ли я вернуть код состояния? посмотри на это: Francky Leyn 5 лет назад 0
Нет, вам не нужно возвращать код состояния. По умолчанию любая команда в сценарии будет изменять код состояния в зависимости от его результата, который хранится в% errorlevel% ^. Сами файлы Bat не изменяют это, если вы специально не делаете это, и это не обязательно. LPChip 5 лет назад 0
Комментарии не предназначены для размещения кода. На ваш оригинальный вопрос был дан ответ. Я предлагаю опубликовать новый вопрос с кодом в кодовом блоке, и мы можем помочь вам понять, почему все работает не так, как ожидалось. LPChip 5 лет назад 0
Размещать их можно только в вопросах. Кодовый блок пишется путем ввода 4 или более пробелов в начале строки. См. Также справку по форматированию при создании нового вопроса. LPChip 5 лет назад 0

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