带有 Powershell 命令引号的批处理文件

带有 Powershell 命令引号的批处理文件

我已经创建了一个脚本来更改我的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%

相关内容