![powershell 中的 ascii (wscript.shell)](https://linux22.com/image/1508299/powershell%20%E4%B8%AD%E7%9A%84%20ascii%20(wscript.shell).png)
我正在创建一个脚本,用于创建指向我们存档驱动器的快捷方式。
我希望文件名以 Omega 符号开头;这样 Windows 总是将其排在底部。
我的脚本的输出显示 omega 符号;但创建的链接将此 omega 更改为 O(大写 O)。我可以手动创建一个以 omega 符号开头的快捷方式,因此它必须与 wscript.shell 相关
脚本的相关部分:
$locatie = $doel+"\Ω_archief "+$file.Name+".lnk"
$Shell = New-Object -ComObject ("WScript.Shell")
$ShortCut = $Shell.CreateShortcut($locatie)
$ShortCut.TargetPath=$file.Fullname
$Shortcut.Save()
答案1
问题在于的快捷方式对象Save()
中的方法WScript.Shell
。看来此 API 调用需要ANSI
名称来创建文件,因此会阻塞 之外的字符[System.Text.Encoding]::Default
。
但是,这里有一个解决方法:使用一个好辨别的ANSI
名称创建一个快捷方式,然后将其重命名,如下所示:
$file = Get-ChildItem $MyInvocation.MyCommand.Path ### mcve
$doel = "$env:USERPROFILE\Desktop\Test" ### mcve
$locatie = $doel+"\Ω_archief "+$file.Name+".lnk"
$locatieTemp = $locatie.Replace('\Ω_archief','\OMEGA_archief')
$Shell = New-Object -ComObject ("WScript.Shell")
$ShortCut = $Shell.CreateShortcut($locatieTemp)
$ShortCut.TargetPath=$file.Fullname
$Shortcut.Save()
if (Test-Path $locatie) { Remove-Item $locatie }
Move-Item -Path $locatieTemp $locatie
### or Rename-Item instead of Move-Item:
# Rename-Item -Path $locatieTemp $(Split-Path $locatie -Leaf)
###
请注意,添加前两行是为了满足最小、完整且可验证的示例(mcve)规则。