Criei um script para alterar meu IP
endereço/máscara e VLAN ID
de uma interface mas o problema é que para alterar o VLAN ID
, preciso executar um PowerShell
comando. Minha variável contendo o nome da interface contém um espaço, então preciso colocá-la entre aspas. O problema é que preciso inserir duas variáveis para o mesmo interfaceName
, uma com aspas simples para o comando Powershell e outra para o netsh
comando batch, caso contrário, estou recebendo um erro. Este é o meu arquivo de lote:
:: Configuration Variables
set ifName='Ethernet 2'
set connectionName="Ethernet 2"
set ipAddress=10.88.167.27
set subnetMask=255.255.255.240
set vlanID=100
:: set defaultGateway=x.x.x.x
:: set primaryDNS=x.x.x.x
:: set alternateDNS=x.x.x.x
:: Change of IP address and NetMask ::
netsh interface ipv4 set address name=%connectionName% source=static addr=%ipAddress% mask=%subnetMask%
:: Change VLAN ID ::
powershell -Command "& {Set-NetAdapter -Name %ifName% -VlanID %vlanID% -Confirm:$false}"
echo The VLAN ID of %ifName% has been successfully changed to %vlanID%
pause > null
Meu script em lote está funcionando bem, mas quero ter apenas uma variável para o nome da interface, em vez de duas. Meu problema é que:
Se eu usar ifName
o comando change IP address, recebo o seguinte erro: The filename, directory name, or volume label syntax is incorrect.
.
Se eu usar o connectionName
comando do PowerShell com aspas duplas, recebo o seguinte erro:
Set-NetAdapter : A positional parameter cannot be found that accepts argument '2'.
At line:1 char:4
+ & {Set-NetAdapter -Name Ethernet 2 -VlanID 100 -Confirm:$false}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Set-NetAdapter], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Set-NetAdapter
Eu até tentei colocar o comando Powershell entre aspas simples e usar dentro connectionName
assim:
powershell -Command '& {Set-NetAdapter -Name %connectionName% -VlanID %vlanID% -Confirm:$false}'
mas a interface de rede VLAN permanece a mesma.
Defina as variáveis usando o
set "varname=varvalue"
padrão de sintaxe e use aspas duplas, se necessário , comoecho "%varname%"
. Então, seu trecho de código deve ser o seguinte: