пакет: Как я могу вызвать второй параметр с пробелами? - PullRequest
1 голос
/ 02 февраля 2011

Я вызываю командный файл с двумя параметрами, например:

C:\myBatch.bat username hello this is text

Теперь я хочу получить доступ к имени пользователя (без проблем,% 1).Но сейчас я хочу получить все остальные слова в один второй параметр.Если я позвоню% 2, будет только "привет".И не возможно, чтобы я назвал командный файл с двойными кавычками вокруг текста ...

Любая идея?(что-то вроде while% i! = "" тогда сделайте это в одной переменной ..)?

Ответы [ 3 ]

4 голосов
/ 02 февраля 2011

Простое использование двойных кавычек является правильным способом упаковки строки, разделенной пробелами, в один параметр, но в качестве альтернативы вы можете использовать FOR для анализа «переменной всех параметров» (% *).

@echo off
FOR /F "tokens=1,*" %%A in ("%*") do (
    echo.Username=%%A
    echo.Message=%%B
)

При вызове test.cmd nickname foo bar baz он печатает:

Username=nickname 
Message=foo bar baz

Я думаю, это то, что вы хотите?

2 голосов
/ 03 февраля 2011

Поместите второй параметр в двойные кавычки при вызове пакетного сценария.

В пакетном сценарии используйте %~2 для ссылки на второй параметр без кавычек.

Если вы хотите использоватьдвойные кавычки внутри параметра в кавычках, дублируйте символ кавычки.При деквотировании в пакетном скрипте дублированные кавычки тоже удаляются, AFAIK.


Вот простой скрипт, иллюстрирующий идею:

@ECHO OFF
ECHO %1 %2
ECHO %~1 %~2

Теперь назовите его так:

mybatch.bat имя пользователя "привет, это текст"

и посмотрите результат:

имя пользователя "привет, это текст"

username hello это текст

То есть, когда вы используете %<em>i</em> для ссылки на параметр, кавычки, если они есть, сохраняются, но %~<i>i</i> эффективно удаляет их для вас.

И, как вы можете видеть из %~1, используйте, если нет кавычек, вывод такой же, как с %1, поэтому вам не нужно всегда включать кавычки просто для оправданияиспользование тильды.

1 голос
/ 02 февраля 2011

На основании этого документа http://ss64.com/nt/syntax-esc.html двойные кавычки должны работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...