Цикл в пакетном скрипте на основе количества входных аргументов - PullRequest
0 голосов
/ 26 апреля 2018

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

@echo off
SetLocal EnableDelayedExpansion

set argC = 0
for %%x in (%*) do Set /A argC+=1

ECHO Start of Loop
ECHO %argC%
ECHO !argC!

FOR /L %%i IN (1,1,!argC!) DO (
  <move command here over the user provided arguments %1, %2 etc, we don't know how many filenames>
)

Теперь я хотел бы заменить ECHO %%i командой и передать имена файлов, введенные пользователем, по одному в том же порядке. Например, если пользователь вводит «a.txt» и «b.txt» в качестве входных данных, если я заменю ECHO %%i командой перемещения, как я могу это сделать?

Было бы замечательно, если бы кто-то мог предложить альтернативу или указать, что я здесь делаю неправильно.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018
for %%i in (%*) do echo "%%~i"

должно хорошо отражать заданные вами параметры. Замените echo соответствующими командами.

BTW - Пакет чувствителен к пробелам в операторе SET. SET FLAG = N устанавливает переменную с именем «FLAG Пробел » в значение « Пробел

0 голосов
/ 26 апреля 2018

Если вы хотите переместить файлы на основе пользовательского ввода. Просто сделайте:

@echo off
for %%a in (%*) do (
 echo move %%a
)

Так что из cmdline вы бы сделали mybatchfile.cmd file1.txt file2.txt и т. Д.

OR

@echo off
set /p "files=Enter Files to copy : "
for %%a in (%files%) do (
 echo move %%a
)

Это просто запросит у пользователя файлы при запуске файла.

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