我已经创建了一个脚本来更改我的IP
地址/掩码和VLAN ID
接口,但问题是,为了更改VLAN ID
,我需要执行一个PowerShell
命令。包含接口名称的变量包含空格,所以我需要将其放在引号中。问题是我需要为同一个插入两个变量interfaceName
,一个带有单引号的变量用于 Powershell 命令,另一个用于批处理netsh
命令,否则,我会收到错误。这是我的批处理文件:
:: 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
我的批处理脚本运行良好,但我希望只有一个接口名称变量,而不是两个。我的问题是:
如果我使用ifName
更改 IP 地址命令,我会收到以下错误:The filename, directory name, or volume label syntax is incorrect.
。
如果我使用connectionName
带双引号的 PowerShell 命令,则会收到以下错误:
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
我甚至尝试将 Powershell 命令括在单引号中并在里面使用,connectionName
如下所示:
powershell -Command '& {Set-NetAdapter -Name %connectionName% -VlanID %vlanID% -Confirm:$false}'
但网络接口 VLAN 保持不变。
答案1
设置变量使用set "varname=varvalue"
语法模式和必要时使用双引号然后echo "%varname%"
,你的代码片段应该如下所示:
:: 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"
:: Change of IP address and NetMask ::
netsh interface ipv4 set address name="%connectionName%" source=static addr=%ipAddress% mask=%subnetMask%
:: Change VLAN ID :: needs some tricky escaping
powershell -Command "& {Set-NetAdapter -Name """"'%connectionName%'"""" -VlanID %vlanID% -Confirm:$false}"
echo The VLAN ID of %ifName% has been successfully changed to %vlanID%