Seu problema deriva de peculiaridades de como o CMD (batch) analisa seu código. O comando dentro da cláusula FOR IN () é analisado duas vezes, e o analisador acaba convertendo o =
em um espaço, a menos que seja escapado ou citado.
Aqui está uma solução usando escape:
FOR /F "tokens=2 delims==" %%i IN ('wmic path win32_videocontroller Where DeviceID^="VideoController1" get pnpdeviceid /value 2^>NUL ^| find /i "pnpdeviceid"') DO set vdcd=%%i
Aqui está uma solução usando aspas:
FOR /F "tokens=2 delims==" %%i IN ('wmic path win32_videocontroller Where "DeviceID='VideoController1'" get pnpdeviceid /value 2^>NUL ^| find /i "pnpdeviceid"') DO set vdcd=%%i
É realmente possível usar aspas ao redor do comando inteiro e eliminar todas as fugas:
FOR /F "tokens=2 delims==" %%i IN ('"wmic path win32_videocontroller Where DeviceID='VideoController1' get pnpdeviceid /value 2>NUL | find /i "pnpdeviceid""') DO set vdcd=%%i
Citar e escapar em lote pode ficar confuso muito rapidamente, mas acredite, realmente existem regras e é totalmente previsível :-) Isso pode não parecer assim.