Вывод wmic пуст при запуске из пакетного файла, но содержит информацию при запуске из cmd

503
sinned

У меня есть команда wmic, которая узнает PID моего процесса и прекрасно работает из cmd, но отказывается выдавать вывод при выполнении в bat-файле:

wmic /output:process.pid process where (Name like '%java%' and commandLine like '%part-of-the-path%') get ProcessId 

Когда я запускаю его из cmd, он выдает файл, содержащий

ProcessId 19352 

Информация сопровождается двумя пустыми строками. Когда я запускаю его из пакетного файла, он создает только файл с двумя пустыми строками.

Я пытался /output:filename, > filenameи | more > filenameвсе с тем же результатом.

Почему это? Как заставить команду выводить данные из пакета?

1
В пакетном файле вы заменяете `%` на `%%`? `% jave%` в командной строке должно быть `%% java %%` в командном файле. Sandeep 5 лет назад 1
`% java%` не установлен заранее. Как и SQL, wmic использует это как звездочку, соответствующую любому тексту. Я не хочу, чтобы пакет интерпретировал строку, а просто передал ее wmic как есть. Решение от @Sandeep, кажется, работает. sinned 5 лет назад 0

1 ответ на вопрос

2
Sandeep

Как и большинство языков программирования, пакетный файл также содержит escape-символы. %Знак, используемый в командной строке, является escape-символом в командном файле и придает команде другое значение. На самом деле ищет переменную с именем %java%.

Чтобы решить эту проблему, используйте %%вместо %в командном файле. Чтобы увидеть больше деталей и информации о других escape-персонажах, смотрите здесь .

Следующая команда должна работать в командном файле.

wmic /output:process.pid process where (Name like '%%java%%' and commandLine like '%%part-of-the-path%%') get ProcessId