Изменение аргументов в поле «Target» в свойствах файла [duplicate]

Qt реализует две функции, вы можете узнать из них:

static inline bool qFuzzyCompare(double p1, double p2)
{
    return (qAbs(p1 - p2) <= 0.000000000001 * qMin(qAbs(p1), qAbs(p2)));
}

static inline bool qFuzzyCompare(float p1, float p2)
{
    return (qAbs(p1 - p2) <= 0.00001f * qMin(qAbs(p1), qAbs(p2)));
}

И вам могут понадобятся следующие функции, поскольку

Обратите внимание, что сравнение значений, где p1 или p2 равно 0.0, не будет работать, а также не сравнивает значения, где одно из значений - NaN или бесконечность. Если одно из значений всегда 0.0, вместо этого используйте qFuzzyIsNull. Если одно из значений, вероятно, будет равным 0.0, одно решение должно добавить 1.0 к обоим значениям.

blockquote>
static inline bool qFuzzyIsNull(double d)
{
    return qAbs(d) <= 0.000000000001;
}

static inline bool qFuzzyIsNull(float f)
{
    return qAbs(f) <= 0.00001f;
}

22
задан Doug Chase 27 January 2009 в 22:28
поделиться

3 ответа

Copy-Item $sourcepath $destination  ## Get the lnk we want to use as a template
$shell = New-Object -COM WScript.Shell
$shortcut = $shell.CreateShortcut($destination)  ## Open the lnk
$shortcut.TargetPath = "C:\path\to\new\exe.exe"  ## Make changes
$shortcut.Description = "Our new link"  ## This is the "Comment" field
$shortcut.Save()  ## Save

Нашел версию кода VB здесь: http://www.tutorialized.com/view/tutorial/Extract-the-target-file-from-a-shortcut-file-.lnk / 18349

30
ответ дан JasonMArcher 21 August 2018 в 20:40
поделиться
  • 1
    FYI. Это решение отлично подходит для локальных файлов, оно не работает для UNC-путей. – iraSenthil 2 August 2011 в 18:03
  • 2
    Я сделал несколько тестов, и это отлично работает для UNC-путей. Я не уверен, что тестировал @iraSenthil. – JasonMArcher 31 August 2011 в 21:10
  • 3
    Я не уверен, почему этот код не работает для UNC-путей, я делал то же самое в течение многих лет в VB-Script / JScript. Просто имейте разрешение и доступ, чтобы внести изменения (см. Примеры путей в примечании к публикации Марко Шоу). Что касается Powershell, Tobias поставил все на две приятные функции, получить ярлык и установить ярлык. Найдено здесь: powershell.com/cs/media/p/7895.aspx – Nathan Hartley 31 August 2011 в 21:18
  • 4
    Работала блестяще для меня. Еще несколько полезных атрибутов: $ shortcut.Arguments и $ shortcut.WorkingDirectory. Также отлично работает для путей UNC – Gargravarr 19 July 2013 в 10:06
  • 5
    Вот несколько документов с примерами каждого используемого свойства: computerperformance.co.uk/powershell/… . – absynce 2 February 2016 в 20:49

Я не думаю, что есть родной путь.

Этот DOS используется: Shortcut.exe .

Вам все равно нужно скопировать использовать в удаленной системе, а затем, возможно, вызвать его с помощью WMI, чтобы внести изменения, которые вы ищете.

Я думаю, что проще будет перезаписать и / или создать новый файл.

У вас есть доступ к этим системам через удаленный доступ?

3
ответ дан Marco Shaw 21 August 2018 в 20:40
поделиться
  • 1
    Привет, Марко. Конечно, я могу получить к ним доступ через удаленный доступ. – Doug Chase 29 January 2009 в 04:47
  • 2
    Ну, я не делаю достаточно регулярных админов, как это, но я думаю, вы можете просто использовать этот ресурс для удаленного обновления файла lnk. – Marco Shaw 29 January 2009 в 16:00
  • 3
    Удаленно, вы использовали бы что-то вроде «\\ $ Computer \ C $ \ Documents and Settings \ All Users \ Start Menu \ Programs \ The Shortcut.lnk & quot; для 95/98 / XP / 2003 и «\\ $ Компьютер \ C $ \ ProgramData \ Microsoft \ Windows \ Start Menu \ Programs \ The Shortcut.lnk & quot; для Vista / Win 7/2008. – Nathan Hartley 31 August 2011 в 21:13

Ниже приведены функции, которые я использую для работы с .lnk-файлами. Они являются модифицированными версиями функций, найденных здесь здесь , как упомянуто @Nathan Hartley. Я улучшил Get-Shortcut, чтобы обрабатывать подстановочные знаки, такие как *, передавая строки dir, чтобы развернуть их в множества объектов FileInfo.

function Get-Shortcut {
  param(
    $path = $null
  )

  $obj = New-Object -ComObject WScript.Shell

  if ($path -eq $null) {
    $pathUser = [System.Environment]::GetFolderPath('StartMenu')
    $pathCommon = $obj.SpecialFolders.Item('AllUsersStartMenu')
    $path = dir $pathUser, $pathCommon -Filter *.lnk -Recurse 
  }
  if ($path -is [string]) {
    $path = dir $path -Filter *.lnk
  }
  $path | ForEach-Object { 
    if ($_ -is [string]) {
      $_ = dir $_ -Filter *.lnk
    }
    if ($_) {
      $link = $obj.CreateShortcut($_.FullName)

      $info = @{}
      $info.Hotkey = $link.Hotkey
      $info.TargetPath = $link.TargetPath
      $info.LinkPath = $link.FullName
      $info.Arguments = $link.Arguments
      $info.Target = try {Split-Path $info.TargetPath -Leaf } catch { 'n/a'}
      $info.Link = try { Split-Path $info.LinkPath -Leaf } catch { 'n/a'}
      $info.WindowStyle = $link.WindowStyle
      $info.IconLocation = $link.IconLocation

      New-Object PSObject -Property $info
    }
  }
}

function Set-Shortcut {
  param(
  [Parameter(ValueFromPipelineByPropertyName=$true)]
  $LinkPath,
  $Hotkey,
  $IconLocation,
  $Arguments,
  $TargetPath
  )
  begin {
    $shell = New-Object -ComObject WScript.Shell
  }

  process {
    $link = $shell.CreateShortcut($LinkPath)

    $PSCmdlet.MyInvocation.BoundParameters.GetEnumerator() |
      Where-Object { $_.key -ne 'LinkPath' } |
      ForEach-Object { $link.$($_.key) = $_.value }
    $link.Save()
  }
}
14
ответ дан Tim Lewis 21 August 2018 в 20:40
поделиться
  • 1
    – Chris Martin 28 March 2016 в 19:32
  • 2
    Если вы получаете пустые свойства, такие как .TargetPath, имейте в виду, что CreateShortcut () нуждается в полном UNC-пути к вашему .LNK-файлу. Он игнорирует текущий каталог и ". \ Myshortcut.lnk & quot; терпит неудачу. Вы не получаете ошибку, просто пустые свойства. – Tom Cerul 28 February 2017 в 16:49
Другие вопросы по тегам:

Похожие вопросы: