Я создаю сценарий, который создает ярлыки для нашего диска архивации.
Я хотел бы, чтобы имя файла начиналось со знака Омега; поэтому окна всегда сортируют его внизу.
Вывод моего скрипта показывает знак омега; но созданная ссылка изменяет эту омегу на O (заглавная O). Вручную я могу сделать ярлык, который начинается со знака омега, поэтому он должен быть связан с 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 ответ1

0

Проблема заключается в методе 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)
###

Обратите внимание, что первые две строки добавлены для соответствия правилам Minimal, Complete и Verifiable example (mcve).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .