powershell 中的 ascii (wscript.shell)

powershell 中的 ascii (wscript.shell)

我正在创建一个脚本,用于创建指向我们存档驱动器的快捷方式。
我希望文件名以 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)规则。

相关内容