У меня есть пакетный файл, который должен задать некоторые переменные в начале.
for /f %%A in ('wmic os get osarchitecture ^| find /i "bit"') do set "OSARCH=%%A"
for /f "skip=1 tokens=4" %%B in ('wmic product where "name like 'Microsoft .NET%'" get name') do set "DNVER=%%B"
for /f "tokens=3" %%C in ('reg query "HKLM\SOFTWARE\Microsoft\Internet Explorer" /v svcVersion' do set "IEFULLVER=%%C"
set IEVER=%IEFULLVER:~0,4%
Если я запускаю их в командной строке CMD (заменяя %%A на %A и т. д.), они работают как и ожидалось, но когда я запускаю пакетный файл, первая строка выполняется как и ожидалось, а затем я получаю ошибку & was unexpected at this time
. Я думаю, что это может быть связано с %
after .NET
, но он должен быть там, иначе запрос wmi не вернет нужное мне значение.
решение1
Ошибка «& было неожиданно в это время»
В вашем пакетном файле есть две ошибки.
Ошибка 1:
for /f "skip=1 tokens=4" %%B in ('wmic product where "name like 'Microsoft .NET%'" get name') do set "DNVER=%%B"
В приведенной выше команде необходимо экранировать один %
после NET
. %%
Вместо этого используйте:
for /f "skip=1 tokens=4" %%B in ('wmic product where "name like 'Microsoft .NET%%'" get name') do set "DNVER=%%B"
Ошибка 2:
for /f "tokens=3" %%C in ('reg query "HKLM\SOFTWARE\Microsoft\Internet Explorer" /v svcVersion' do set "IEFULLVER=%%C"
В приведенной выше команде отсутствует )
предыдущая часть do
. Должно быть:
for /f "tokens=3" %%C in ('reg query "HKLM\SOFTWARE\Microsoft\Internet Explorer" /v svcVersion') do set "IEFULLVER=%%C"
Рабочий пакетный файл (test.cmd):
@echo off
setlocal EnableDelayedExpansion
for /f %%A in ('wmic os get osarchitecture ^| find /i "bit"') do set "OSARCH=%%A"
for /f "skip=1 tokens=4" %%B in ('wmic product where "name like 'Microsoft .NET%%'" get name') do set "DNVER=%%B"
for /f "tokens=3" %%C in ('reg query "HKLM\SOFTWARE\Microsoft\Internet Explorer" /v svcVersion') do set "IEFULLVER=%%C"
echo %OSARCH%
echo %DNVER%
echo %IEFULLVER%
endlocal
Пример вывода:
F:\test>test
64-bit
4.5.2
11.0.9600.17691
Проценты выхода из игры
Символ
%
имеет особое значение для параметров командной строки и параметров FOR.Чтобы рассматривать процент как обычный символ, удвойте его:
%%
Источниксинтаксис
Дальнейшее чтение
- Индекс AZ командной строки Windows CMD- Отличный справочник по всем вопросам, связанным с командной строкой Windows.
- синтаксис- Экранированные символы, разделители и кавычки.
- wmic- Команда инструментария управления Windows.