Есть три команды:
Их я спокойно выполняю в ручную в cmd, вставляя по очереди каждую. Если я их добавлю все сразу в батник, то выполнится только первая. А вот как выполнить автоматически остальные не знаю – после первой команды в следующей строчке добавляется символ $. Как понимаю он мешает автоматом вставить следующую команду.
Подскажите, как исправить можно?
Ваш скрипт ждет завершения выполнения “c:Program Files (x86)BlueStacksHD-Adb.exe” shell.
добавьте в начало строки слово start – батник не будет ждать =)
т.е. перва строка
start “c:Program Files (x86)BlueStacksHD-Adb.exe” shell.
$ тут не при чем, первая строка запускает adb shell, остальные две команды выполняются не в cmd а на анроиде в shell. Вы же написали в батнике, что все три строки должны выполниться в cmd на хосте. Должно быть
В созданном тобой батнике добавь в конце pause – увидишь что пишет консоль, а там может и поймешь причину, и сюда напиши что получится.
от 230 000 ₽
12 авг. 2023, в 20:34
2000 руб./за проект
12 авг. 2023, в 19:34
2500 руб./за проект
12 авг. 2023, в 18:48
3000 руб./за проект
04.02.2013, 00:56. Показов 359836. Ответов 16
Вдохновившись сообщением от FraidZZ, написал мини-статейку, основанную на изложенных им положениях.
Циклическиe операции FOR
* Примеры под спойлером
Виды наборов для FOR
Для команды For без ключей набором может являться:
1) Маска файлов (или путь + маска файлов)
– в двойных кавычках, или без них:
Результат: список файлов с расширением .txt в текущем каталоге.
IN (*.txt *.bat)
Результат: список файлов с расширениеми .txt и .bat в текущем каталоге.
IN (“C:Folder 1Doc_31-12-*.txt”)
Результат: тот же. Но поиск ведется в каталоге C:Folder 1 (заметьте с пробелом в имени);
имя файла начинается на Doc_31-12-
Прим.: FOR без ключа не умеет выводить список каталогов.
маска файлов – это набор файлов, заданный с помощью подстановочных знаков * и/или ?
где – обозначает 0 или больше любых символов в имени файла.
а – означает 0 или 1 любой символ в имени файла.
2) Строка
– в двойных кавычках, или без них:
Строкой считается любая последовательность символов, если она не содержит знаков маски * или ?
Смысл цикла здесь в том, чтобы разбить такую строку по пробелам (или знакам табуляции)
и выполнить с каждой подстрокой список команд.
Если мы хотим, чтобы какая-то из строк не “билась” по пробелам, укажем ее в двойных кавычках:
Моя гитара
Моя дорогая рыбка
При этом, чтобы не выводились сами кавычки “” мы используем модификатор ~ (тильда) при раскрытии переменной цикла
О других модификаторах переменной цикла можно почитать здесь и здесь.
Не по теме:
О наборах для FOR с ключем /F далее в нижнем спойлере.
часто используется для построчного разбора файла, т.е.
выведет все строки файла 1.txt, который находится в корне диска C.
(Use back quotes) означает, что набор с двойными кавычками подразумевает передачу в цикл имени файла.
означает, что в переменную будет записана вся строка (без разделения по пробелу или знаку табуляции, т.к. стандартный разделитель заменен на NULL (пустой символ).
В такой вариации:
приводит к тому же результату, что и . Означает прекратить разбивку по разделителю после “0-го” токена, т.е. сразу же.
Этот вариант необходим для работы с файлом, путь или имя которого содержит пробелы.
Можно было не использовать , тогда команда приняла бы вид:
но такая конструкция восприняла бы пробел в имени как определение нового файла, поэтому UseBackQ более приемлем.
Виды наборов для FOR /F
Виды наборов для FOR /F:
1) Набор файлов (задание маски недопустимо!)
чтение содержимого файла(ов) построчно в переменную цикла!
принятый по-умолчанию разделитель (пробел и знак табуляции) для этой конструкции цикла не применяется.
А что получится, если установить delims= (возле равно – знак пробела) ?
2) Строка (допускаются практически любые символы)
3) Команда (сначала выполняется она, а уже ее результаты обрабатываются циклом как строка(-и))
1.1. Чтение файла – Набор файлов
1.2. Чтение файла – Набор файлов + UseBackQ
Получаем возможность использовать пробелы.
Результат: выведет содержимое файла 1.txt из каталога c:older 1
(заметьте, в имени папки есть пробел).
Сообщение от Результат
a=Каждое; b=слово; c=в; d=отдельную; e=переменную
2.2. Строка + UseBackQ
Результат такой же.
Сначала выполняется , которая выводит информацию о папках в текущем каталоге.
Вот что попадает под разбор циклу:
3.2. Команда + UseBackQ
Детальную справку можно получить, введя в консоль команду
В отличие, от FOR без ключа, в все токены (все подстроки одной строки) попадают сразу В ПЕРВУЮ ИТЕРАЦИЮ цикла.
Они будут распределены по РАЗНЫМ переменным цикла, идущим в алфавитном порядке, начиная с буквы, заданной после FOR /F %%
Обратите внимание: по умолчанию, цикл выдаёт в результатах только 1-ый токен. Если вам нужно, получить другой, нужно явно указывать модификатор “tokens=xxx”.
Макс. количество токенов и обход ограничения
Максимальное кол-во токенов составляет – 26,
если начальным указать %%a либо %%A (регистр имеет значение)
При этом переход с %%z в %%A не происходит. Остальная часть подстрок опускается.
Можно проверить:
Windows Batch file
Бывают случаи, когда требуется разбить строку по специфическому разделителю и при этом выполнить одну и ту же команду над каждой из подстрок (токеном). Кол-во токенов неизвестно.
Метод показал Anonymоus в теме Символ переноса строки в переменной окружения
Алгоритм заключается в замене разделителя на пробел с одновременным заключением каждого токена в двойные кавычки. Далее строка разбирается обычным циклом FOR без ключа.
А теперь рассмотрим более сложный пример:
1.2. Чтение файла (сложный пример).
Давайте возьмем сложный пример, и раскусим “крепкий орешек”
Имеем в распоряжении файл 1.txt, который находится рядом с батником.
Сообщение от Содержимое файла 1.txt
Порядок разбора (или “как прибл. будет думать ком. строка”):
1) – означает каталог, где находится батник, например c: emp
4) Итак, первая строка так и называется “первая строка”
– означает пропустить от начала файла 1-у строку,
значит идем дальше:
7) Теперь смотрим сюда – значит, что первой букве цикла нужно присвоить значение 2-го токена.
Первая буква цикла у нас X. Переменная называется
А второй токен – это подстрока “кода”
С 3-ей строкой потренируйтесь самостоятельно.
Вот такой результат окажется на экране:
Указанная команда выведет:
Прим.: дробные числа командной строкой не поддерживаются.
Для того чтобы выполнить несколько команд из одной командной строки, нужно объединить их с помощью символа условной обработки:
команда1 & команда2 — Используется для разделения нескольких команд в одной командной строке. В cmd.exe выполняется первая команда, затем вторая команда.
команда1 && команда2 — Запускает команду, стоящую за символом &&, только если команда, стоящая перед этим символом была выполнена успешно. В cmd.exe выполняется первая команда. Вторая команда выполняется, только если первая была выполнена успешно.
С файла file.txt будет снят атрибут «Скрытый» и если команда attrib при этом не вернёт ошибку, файл будет переименован в file.tmp.
7 ответов
&& выполнит команду 2, когда команда 1 будет завершена, если она не сработает.
& будет выполняться независимо.
Как минимум в MS-DOS 6.22 я использовал ключ Ctrl + T , чтобы получить символ абзаца. Это работало так же, как и & amp; , упомянутое Phoshi. Это будет работать, однако, если у вас работает doskey.exe.
Если вы хотите выполнить несколько команд с 1 строкой, где вы, например, запускаете команды с start , если вы хотите выполнить команду следующим образом:
Затем вам нужно сделать это за 2 шага (однострочное решение находится в конце этого ответа).
Сначала напишите команды во временный пакетный файл (в этом случае вы можете использовать & или && ):
Затем используйте start для запуска командного файла:
Note: The empty pair of double-quote marks is for the «Title» that will be shown in the title-bar of the command window that start will open. This «Title» argument is technically an optional argument to start , but it is actually required, if the command that start will run is double-quoted. For instance, in the second example:
start «» «temporary foobar.cmd»
if you leave out the empty pair of double quote marks like this:
start «temporary foobar.cmd»
then start will open a new command window, and use «temporary foobar.cmd» as the new command window «Title» , and nothing will be executed in the new command window.)
Если вы хотите, чтобы start дождался завершения командного файла (после отклонения pause ), до завершения start , вам нужно добавить переключатель /w в команду start :
Вы можете поместить все это вместе на одну строку и даже удалить (удалить) временный пакетный файл ( foobar.cmd ):
Обратите внимание, что если вы собираетесь удалить временный пакетный файл, вам нужно запустить start с помощью переключателя /w , в противном случае временный командный файл, вероятно, будет удален до того, как он сможет запустить.
Если вы какое-то время использовали Windows 10, возможно, вы знаете о командной строке. Командная строка-одна из лучших утилит Windows 10, которая позволяет автоматизировать и выполнять широкий спектр задач.
Есть много вещей, которые вы можете делать с помощью командной строки. Например, вы можете использовать лучший Команды CMD для выполнения основных задач. Точно так же бывают случаи, когда мы хотим запустить несколько команд в командной строке.
Вы можете выполнять несколько команд в командной строке, но вам нужно делать это вручную. Что, если я скажу вам, что вы можете запускать несколько команд одновременно в командной строке?
Да, вы можете запускать две команды в одной строке в командной строке Windows. Для этого вам нужно создать файл пакетного сценария с помощью Блокнота. Ниже мы поделились двумя лучшими методами для запуска нескольких команд в CMD на компьютерах с Windows 10. Давай проверим.
С помощью Блокнота
Этот метод включает создание пакетного сценария для выполнения нескольких команд. Используя это, вы можете автоматически выполнять все свои команды одну за другой. Для этого мы собираемся использовать команды для сброса кеша DNS в Windows 10-
Шаг 1. Прежде всего откройте Блокнот на своем компьютере.

Шаг 2. Теперь введите команды, которые вы хотите выполнить, одним щелчком мыши. В этом примере мы используем четыре команды, упомянутые выше.

Шаг 3. Затем нажмите файл и выберите параметр «Сохранить как» .

Шаг 4. Теперь сохраните этот файл с расширением .bat . Например, DNSreset.bat

Шаг 5. Если вы хотите сбросить кеш DNS, дважды щелкните файл пакетного сценария.

Вот и все! Вы сделали. Вот как вы можете запускать несколько команд в командной строке.
Использование специальных символов
В этом методе мы будем использовать некоторые специальные символы между командами, чтобы выполнять их одновременно. Следуйте инструкциям, приведенным ниже.
Шаг 1. Если вы хотите запустить две или более команд одновременно, просто вставьте «&» между командами. Например- ipconfig/flushdns & ipconfig/Renew

Шаг 2. Если вы хотите выполнить вторую команду после успешного выполнения первой, используйте «&&» между командами. Например- ipconfig/flushdns && ipconfig/Renew


Вот и все! Вы сделали. Вы можете использовать эти знаки между командами по своему желанию.
Итак, эта статья посвящена тому, как запускать несколько команд в CMD в Windows 10. Надеюсь, эта статья вам помогла! Пожалуйста, поделитесь им также со своими друзьями. Если у вас есть какие-либо сомнения по этому поводу, сообщите нам об этом в поле для комментариев ниже.
If you want to execute multiple commands with 1 line, where you are starting the commands with start, for example, if you wanted to execute a command like this:
start “” netsh dump && pause
Then, you need to do it in 2 steps (one-line solution is at the end of this answer).
First, write the commands to a temporary batch file (in this case, you can use & or &&):
Then, use start to start the batch file:
start “” foobar.cmd
-or-
start “” “temporary foobar.cmd”
Note: The empty pair of double-quote marks is for the “Title” that will be shown in the title-bar of the command window that start will open. Этот аргумент «Заголовок» технически является необязательным аргументом для запуска, но на самом деле он требуется, если запускаемая команда заключена в двойные кавычки. Например, во втором примере:
запустить “temporary foobar.cmd”
затем start откроет новое командное окно и использует “temporary foobar.cmd” в качестве “Заголовка” нового командного окна, и в новом командном окне ничего выполняться не будет.)
Если вы хотите, чтобы start дождался завершения командного файла (после снятия паузы) до завершения запуска, вам нужно добавить ключ /w в команду запуска:
запустить “” /w foobar.cmd
Можно все это собрать в одну строку и даже убрать (delete) временный батник (foobar.cmd):
Обратите внимание, что если вы собираетесь удалить временный пакетный файл, вам нужно запустить start с ключом /w, иначе временный пакетный файл, вероятно, будет удален до того, как успеет запуститься.




