2015-05-20 4 views
1

Поскольку синтаксис Windows cmd нелепо и излишне сложный и трудный для чтения, мне сложно определить правильный способ его ввода. В основном я просто пытаюсь создать цикл цикла, который работает:Batch for loop delimeters

sc query | Findstr SERVICE_NAME

Затем берет услуги от выхода и работает:

SC sdshow "SERVICE_NAME"

Вот что я пытался:

для/f "tokens = 2 delims ="% a IN ("sc query | findstr SERVICE_NAME") DO sc sdshow% a

Но, по-видимому, делиметр выбирает второй токен в команде, которую я печатаю, а не выходе. Я думал, что это сработало похоже на: «cut -d» «-f2», но, видимо, нет. Есть ли способ сделать это в страшном чудовище, которое является синтаксисом Windows cmd?

ответ

2

Для чего это стоило, вы были действительно закрыть. В пакетном режиме вы обрабатываете вывод команды с помощью цикла for, используя одинарные кавычки ('). Кроме того, вам нужно выйти из трубы внутри команды с помощью ^.

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

for /f "tokens=2 delims= " %%a in ('sc query ^| findstr "SERVICE_NAME"') do sc sdshow %%a