Um problema que você terá é que o nome da porta é texto livre: pode ser praticamente qualquer coisa; não é garantido que seja o endereço IP. A menos que você tenha certeza de que as pessoas que configuram as impressoras definem explicitamente os nomes para começar com IP_ , isso não é garantido.
Eu recomendaria usar o PowerShell se você puder; os cmdlets Get-PrinterPort e Set-PrinterProperty ou talvez Set-PrintConfiguration ( documentos do Win10 , Documentos do Win8 , Documentos do Win8.1 ) são muito úteis. Infelizmente, eles são disponíveis apenas no Windows 8 ou Server 2012 e mais recentes . Eu só tenho acesso ao Windows 7 no momento e não posso testá-los.
Caso contrário, você pode usar prnport diretamente, em vez de passar por prnmngr primeiro. prnport -l irá "listar todas as portas TCP". Se você usar isso em conjunto com um script semelhante ao de David, você terá os resultados corretos:
NB: Pode ser necessário substituir as invocações prnport por cscript %windir%\System32\Printing_Admin_Scripts\en-US\prnport.vbs , dependendo da sua configuração. Além disso, a região en-US pode mudar.
for /f "tokens=1,2,*" %%a in ('prnport -s computer-01 -l ^| find "Port name"') do (
prnport -t -s computer-01 -r "%%c" -md
)
Breve explicação:
- Este é um loop
forexpandido. Vejafor /?para detalhes. - Estamos passando por todos
Port name foolinhas na saída e tirandofoodeles. - Especificando
tokens=1,2,*, nós tokenizamos a sequência de resultado por espaços e definimos%%aaPort,%%banamee%%cpara tudo depois (é isso que o asterisco significa).
Você provavelmente desejará passar o nome do computador como outra variável.
Observe também que isso não controla casos em que não existem impressoras TCP / IP. Eu suponho que eles não farão nada, já que o corpo do loop nunca deve ser executado.
Outra opção é usar o WMI diretamente, que é o que os scripts de gerenciamento da impressora fazem sob o capô.