1

Тема: CMD/BAT: Проблема с циклом

Я использую вот такую ерундень:


	FOR /F "delims=" %%i IN ('КОМАНДА') DO (set a=%%i)
	IF "%a%" neq "" (
		%a%
		set a=
	)

Суть в том, что на выходе КОМАНДЫ - код, который нужно выполнить. Всё работает до того момента, как в этом коде появляется ! текст с пробелами в кавычках ( echo "hello world" ). Если там будет команда с аргументами, соответственно разделёнными пробелами ( nircmd savescreenshot okno.png ), то всё работает и если текст в кавычках без пробелов ( echo "abcdef" ) - тоже. Батник просто закрывается без объяснения причин. Что мне с этим делать?

2 (изменено: Мальчик-гей, 2017-08-16 09:39:54)

Re: CMD/BAT: Проблема с циклом

Затруднение не с циклом, а с раскрытием переменных окружения в условии команды IF.
Получается синтаксически недопустимая команда:

IF "echo "hello world"" neq "" (

Возможные решения:
1) отложенное раскрытие переменных;
2)

IF defined a (

3) если на выходе КОМАНДА лишь одна строка можно обойтись без лишних переменных

FOR /F "delims=" %%i IN ('КОМАНДА') DO (
	IF "%%i" neq "" %%i (
		%%i
	)
)

4) на самом деле проверка на непустую строку вообще не нужна - ну будет попытка выполнить пустую строку как код и ничего не произойдёт.