Как составить список аргументов, который сбрасывается на командный файл? - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь создать список всех файлов, которые перетаскиваются в сценарий, разделенных точками с запятой.

set b =
FOR %%a IN (%*) do (
    set "b=%b%%%a;"
) > test.tmp
echo b
pause

Это то, что у меня есть, но сценарийне отображать список файлов.Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 19 марта 2019

К echo полные пути и имена файлов, которые вы должны перетаскивать, без двойных кавычек:

@echo off
(for %%a in (%*) do (
   echo %%~a;
  )
)> test.tmp
type test.tmp
pause

Чтобы включить двойные кавычки и полный путь:

@echo off
(for %%a in (%*) do (
   echo %%a;
  )
)> test.tmp
type test.tmp
pause

выводить только имя файла без пути:

@echo off
(for %%a in (%*) do (
   echo %%~nxa;
  )
)> test.tmp
type test.tmp
pause

и echo только имя файла, исключая путь или расширение:

@echo off
(for %%a in (%*) do (
   echo %%~na;
  )
)> test.tmp
type test.tmp
pause

type test.tmp просто показывает вам содержимое файла после его написания, вы можете удалить его, если он вам не нужен.

Предлагаю вам также прочитать справку по команде for:

  • for /?

Наконец, если вы действительно хотите установить переменную (хотя и не нужную), вам нужно enabldelayedexpansion или call echo %%b%%, удвоив %

0 голосов
/ 19 марта 2019
@echo off
setlocal enabledelayedexpansion

set "b="

for %%a in (%*) do (
    set "b=!b!%%a;"
)

if defined b (
    > test.tmp echo(!b:~0,-1!
)

pause

Для добавления к b в цикле for может потребоваться отложенное расширение.Используйте ! вместо % для отложенных расширенных переменных.Чтобы обрезать завершающий ;, сначала проверьте, определена ли переменная, затем обрежьте последний символ, используя -1 в !b:~0,-1!, который переводит все символы с нулевой позиции на второй последний символ.

Примечание: set b = - это имя переменной b с пробелом.

Просмотр set /? о том, как получить подстроки из строк.

0 голосов
/ 19 марта 2019

на основе это :

пример кода в файле F:\printArguments.bat может выглядеть так:

FOR %%a IN (%*) do (
    CALL:PrintTheArgument %%a
)
pause
GOTO:EOF

:PrintTheArgument

echo. %~1

GOTO:EOF

Вы можете проверить это, например, так:

F:\printArguments.bat "edek" "z" "fabryki" "kredek"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...