Пакет: «% ~ 1» работает, но «% ~ *» является синтаксической ошибкой.Как мне найти эквивалентную команду? - PullRequest
0 голосов
/ 20 октября 2018

Пакет: "%~1" работает, но "%~*" - синтаксическая ошибка.

Как найти эквивалентную команду?

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Поскольку %* это batch parameter is a wildcard reference to all the arguments not including %0, вы не можете использовать ~ для него, но вы можете использовать цикл для всех аргументов и %%~ их, например:

for %%x in (%*) do (
    echo %%~x
)

Также есливам нужно объединить их в один аргумент, который вы можете использовать setlocal enabledelayedexpansion с этим циклом:

setlocal enabledelayedexpansion
set args=
for %%x in (%*) do (
  set args=!args! %%~x
)
echo %args:~1%

объяснение:

  1. !args! - это еще один способ использования переменной при использовании setlocal enabledelayedexpansion
  2. %args:~1% удалить первый пробел.

А вот пример без setlocal enabledelayedexpansion, который не принимает ! символов из аргументов:

set args=
for %%x in (%*) do call :SETARGS %%x
GOTO :END
:SETARGS
set args=%args% %~1
:END
echo %args:~1%
0 голосов
/ 20 октября 2018

Вы можете удалить кавычки из всех параметров и сохранить их в одной переменной, используя что-то вроде следующего:

@ECHO off

echo %*

set args=%~1
echo %args%
shift

:Clean
if [%1]==[] goto:End
set args=%args% %~1
shift
goto:Clean

:End

echo %args%

При этом используется команда shift для циклического перебора каждого параметра, удаления кавычек.и добавьте его в переменную окружения args.

Дополнительное чтение:

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