Сценарии оболочки Windows: проверьте параметры пакета, содержащие двойные кавычки - PullRequest
1 голос
/ 04 декабря 2009

Приветствую, уважаемые эксперты!

Я хочу проверить существование строки параметра (или аргумента) в моем пакетном скрипте:

if "%*"=="" findstr "^::" "%~f0"&goto :eof

Это прекрасно работает, если ни один из параметров не заключен в двойные кавычки. Например:

test.bat par1 par2 ... --- works

но

test.bat "par 1" par2 ... --- fails

Мой вопрос:

1) Есть ли способ преодолеть это вместо требования использования для использования символа без двойных кавычек для указания «длинных» аргументов, а затем использовать подстановку строк?

2) Могу ли я когда-нибудь использовать «если» для сравнения двух строк, содержащих как двойные кавычки, так и пробелы?

Ваш быстрый и четкий ответ был бы очень признателен.

Ответы [ 3 ]

2 голосов
/ 04 декабря 2009

~ удалит двойные кавычки, но не работает на% *, но если вы просто хотите узнать, нет ли параметров, достаточно просто проверить% 1

if "%~1"==""

Вы можете сначала вызвать setlocal ENABLEEXTENSIONS, чтобы убедиться, что расширения включены (требуется для ~)

0 голосов
/ 06 декабря 2009

Поскольку ответ Андрея не в состоянии правильно посчитать аргументы, вот способ, который работает, даже с более чем 9 аргументами (и он даже сохраняет исходные, поэтому %1 по-прежнему указывает на первый, перемещая shift вход в подпрограмму):

@echo off
call :get_num_args %*
echo %NumArgs%
goto :eof

:get_num_args
  set NumArgs=0
  :loop
  if not [%1]==[] (set /a NumArgs+=1) else (goto :eof)
  shift
  goto loop
goto :eof
0 голосов
/ 05 декабря 2009

Спасибо, Андрес. Вот еще два фрагмента кода для проверки наличия и количества переданных параметров:

set ArgumentString=%*
if not defined ArgumentString findstr "^::" "%~f0"&goto :eof
if "%ArgumentString:"=%"=="" findstr "^::" "%~f0"&goto :eof

set NumberOfArguments=0
for /l %%N in (1,1,9) do (
  call set CurrentArgument=%%%%N
  if defined CurrentArgument set /a NumberOfArguments += 1
)
if %NumberOfArguments% NEQ %N% findstr "^::" "%~f0"&goto :eof 

Здесь переменная N содержит необходимое количество параметров.

Надеюсь, это кому-нибудь поможет!

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