PowerShell生成bat文件时变量未解析为实际值如何解决?
问题原因
PowerShell 的字符串规则中,单引号包裹的为字面量字符串,所有内容都会原样输出,不会解析内部的$变量、转义字符等;只有双引号包裹的可扩展字符串,才会自动将内部的$变量替换为实际取值。你当前的命令中 imapsync 整段命令用了单引号包裹,因此$User、$PW1 等变量都不会被替换。
解决方法
将包裹命令的单引号替换为双引号,同时对字符串内部原本的双引号用反引号`(PowerShell 转义符)转义即可,修改后的完整代码如下:
$User = Read-Host -Prompt "User" $PW1 = Read-Host -Prompt "Password1" $PW2 = Read-Host -Prompt "Password2" ".\imapsync.exe --host1 192.168.0.69 --user1 $User@Example.com --password1 $PW1 ^ --host2 172.20.100.96 --user2 $User@Example.lokal --password2 $PW2 ^ --automap --exclude `"&ANY-ffentlicher Ordner`" --exclude `"Freigegebene Postfächer`"" | out-file C:\Users\User\Downloads\Test\Test_$User.bat -Encoding Default
补充说明
- 新增的
-Encoding Default参数可以让生成的bat文件使用系统默认编码,避免运行时出现中文/特殊字符乱码 - 如果字符串内有需要保留的$符号不被解析,只需在对应$前加反引号`转义即可
内容的提问来源于stack exchange,提问作者tobiass.so
相关产品推荐
相关产品推荐

