Массовое изменение целевых ярлыков?

У меня сотни ссылок на сайты, где цель выглядит так:

C:UsersHerbAppDataLocalGoogleChromeApplicationchrome.exe www.somesite.com/foo

Я только что обновился до Windows 8, и исполняемый файл Chrome теперь хранится в программных файлах; поэтому, чтобы эти ярлыки работали, я должен изменить их на это:

"C:Program файлы (x86)GoogleChromeприложениеchrome.исполняемый" www.somesite.com/foo

есть ли способ автоматизировать это изменение? Я программист, но не сделал много с Windows сценариев.

27
задан Kjuly
07.03.2023 6:13 Количество просмотров материала 3422
Распечатать страницу

4 ответа

недавно я столкнулся с аналогичной проблемой и решил написать скрипт модификации ссылок, как первоначально просили. Возможно, кому-то это пригодится. Это скрипт PowerShell на основе ранее упомянутой ссылке, но имеет некоторые улучшения (только триггеры на ведущем имени пути, изменяет существующую ссылку вместо удаления / создания, имеет режим сухого запуска и т. д.).

Я не особо осведомлен, когда дело доходит до PowerShell, поэтому я приветствуем любые предложения по улучшению:

$oldPrefix = "\OldServer\Archive\"
$newPrefix = "\NewServer\Archive\"

$searchPath = "Z:\"

$dryRun = $TRUE

$shell = new-object -com wscript.shell

if ( $dryRun ) {
   write-host "Executing dry run" -foregroundcolor green -backgroundcolor black
} else {
   write-host "Executing real run" -foregroundcolor red -backgroundcolor black
}

dir $searchPath -filter *.lnk -recurse | foreach {
   $lnk = $shell.createShortcut( $_.fullname )
   $oldPath= $lnk.targetPath

   $lnkRegex = "^" + [regex]::escape( $oldPrefix ) 

   if ( $oldPath -match $lnkRegex ) {
      $newPath = $oldPath -replace $lnkRegex, $newPrefix

      write-host "Found: " + $_.fullname -foregroundcolor yellow -backgroundcolor black
      write-host " Replace: " + $oldPath
      write-host " With:    " + $newPath

      if ( !$dryRun ) {
         $lnk.targetPath = $newPath
         $lnk.Save()
      }
   }
}
9
отвечен Terrance 2023-03-08 14:01

Make

C:\Users\Herb\AppData\Local\Google

соединение каталогов, указывающее на

C:\Program Files (x86)\Google

используя Mklink проблема решена.

3
отвечен Tom Wijsman 2023-03-08 16:18

у меня есть сумасшедшие сетевые администраторы, которые всегда меняют путь UNC к моему рабочему каталогу. Используя пример домена, чтобы проиллюстрировать изменения, я клянусь, что видел, по крайней мере, эти четыре разных UNCs в одном каталоге и файлах за последние 6 месяцев:

\contoso\Projects\rhinoexhibit\
\contoso\Design\Projects\rhinoexhibit\
\contoso.com\Design\Projects\rhinoexhibit\
\city.contoso.com\Departments\Design\Projects\rhinoexhibit\
\city.contoso.com\Departments\AlphaDesignGroup\Projects\rhinoexhibit\

я тоже пользуюсь .LNK-файлов, что оба прямую ссылку на файл в поле "Объект":

\contoso\Projects\rhinoexhibit\rhinospecifications.pdf

и .Файлы LNK, которые ссылаются на приложение, чтобы открыть файл с определенными параметрами (здесь я использую Foxit Читатель, чтобы открыть файл PDF на определенную страницу) в поле цель:

"C:\Program Files (x86)\FOXIT READER\Foxit Reader.exe" /A page=37 "\contoso\Projects\rhinoexhibit\rhinospecifications.pdf"

эти каталоги находятся на корпоративных сетевых акциях, и у меня нет доступа, чтобы изменить UNC на акции или использовать любой вид перенаправления, поэтому модификация ответа Терренса сработала лучше всего для меня. Поскольку я был новичком в PowerShell, мне пришлось выяснить, как использовать его, поэтому я дам пошаговые инструкции о том, как использовать мою модификацию своего отличного сценария:

  1. используя Блокнот, вставьте приведенный ниже код в новый текстовый документ. Сохраните документ как Edit-LNK-files.ps1 в каталог, который легко найти и ввести (например C:\MyPowerShells)
  2. в блокноте, отредактируйте $oldString параметр (строка 4), содержащий строку, которую вы хотите найти а то $newString параметр (строка 7), содержащий нужную строку чтобы заменить его. Отредактируйте $searchPath параметр (строка 10) для указания каталог, в котором вашему .Файлы LNK для редактирования проживать. кроме того, вы можете указать эти переменные позже, как вы хотите, запустив сценарий из командной строки PowerShell и редактирования параметров (т. е. & "C:\MyPowerShells\Edit-LNK-files.ps1" -oldString E:\ -newString D:\ -searchPath "C:\My LNKs\"
  3. запуск Windows Powershell от имени администратора: Пуск > Все программы > Стандартные > Windows PowerShell, щелкните правой кнопкой мыши Windows PowerShell и выберите Запуск от имени администратора
  4. в Powershell введите set-executionpolicy remotesigned и нажимаем Enter
  5. тип Y и нажмите Enter, чтобы разрешить PowerShell для запуска сценария, созданного в блокноте (может потребоваться изменить его после завершения работы, чтобы обеспечить безопасность системы).
  6. тип & "C:\MyPowerShells\Edit-LNK-files.ps1"
  7. нажмите Enter, чтобы выполнить "сухой пробег" (отличная идея Терренс! но я поменял это на дефолтное)
  8. обзор выходных от "сухого хода" ... а пути правильно? Если нет, измените $newString и $oldString переменные соответствующим образом, затем повторите шаги 6-8, чтобы повторить сухой прогон. Othewise, перейдите к шагу 9.
  9. если сухой прогон выглядит хорошо, повторите шаг 6, но на этот раз добавьте параметр-RealRun, чтобы он выглядел как & "C:\MyPowerShells\Edit-LNK-files.ps1" -RealRun. Теперь, когда вы нажмете Enter, это будет на самом деле изменить .LNK файлы

вот отредактированный скрипт:

[CmdletBinding()]
Param(
    [Parameter(Mandatory=$False,Position=1)]
    [string] $oldString="\contoso\Projects\rhinoexhibit\",

    [Parameter(Mandatory=$False,Position=2)]
    [string]$newString="\city.contoso.com\Departments\AlphaDesignGroup\Projects\rhinoexhibit\",

    [Parameter(Mandatory=$False,Position=3)]
    [string]$searchPath="C:\My LNKs\",

    [switch]$RealRun
)

$shell = new-object -com wscript.shell
$filesFound= 0

if ( $RealRun ) {
   write-host "Executing real run" -foregroundcolor red -backgroundcolor black
} else {
   write-host "Executing dry run" -foregroundcolor green -backgroundcolor black
}

dir $searchPath -filter *.lnk -recurse | foreach {
   $lnk = $shell.createShortcut( $_.fullname )
   $oldPath= $lnk.targetPath
   $oldArgs= $lnk.Arguments


   $lnkRegex = ",*" + [regex]::escape( $oldString )

   if ( $oldPath -match $lnkRegex ) {
      $newPath = $oldPath -replace $lnkRegex, $newString

      write-host "Found: " $_.fullname -foregroundcolor yellow -backgroundcolor black
      write-host " Replace: " $oldPath
      write-host " With:    " $newPath
      $filesFound++

      if ( $RealRun ) {
         $lnk.targetPath = $newPath
         $lnk.Save()
      }
   }

   if ( $oldArgs -match $lnkRegex ) {
      $newArgs = $oldArgs -replace $lnkRegex, $newString

      write-host "Found:  " $_.fullname -foregroundcolor yellow -backgroundcolor black
      write-host "Target: " $oldPath -foregroundcolor yellow -backgroundcolor black
      write-host " Replace Args: " $oldArgs
      write-host " With Args:    " $newArgs
      $filesFound++

      if ( $RealRun ) {
         $lnk.Arguments = $newArgs
         $lnk.Save()
      }
   }
}

if ($filesFound -eq 0) {
    write-host "No LNK files found with " $oldString "in target or arguments" -foregroundcolor red -backgroundcolor black
}
else {
    if ($RealRun) {
        write-host $filesFound "files found and edited" -foregroundcolor red -backgroundcolor black
    }
    else {
        write-host $filesFound "files found" -foregroundcolor green -backgroundcolor black
    }
}

запуск этого сценария должен успешно измениться .LNK shortuct файлы со следующим в целевой: box

\contoso\Projects\rhinoexhibit\rhinospecifications.pdf

to

\city.contoso.com\Departments\AlphaDesignGroup\Projects\rhinoexhibit\rhinospecifications.pdf

и от

"C:\Program Files (x86)\FOXIT READER\Foxit Reader.exe" /A page=37 "\contoso\Projects\rhinoexhibit\rhinospecifications.pdf"

to

"C:\Program Files (x86)\FOXIT READER\Foxit Reader.exe" /A page=37 "\city.contoso.com\Departments\AlphaDesignGroup\Projects\rhinoexhibit\rhinospecifications.pdf"
3
отвечен mjblay 2023-03-08 18:35

Это должно быть возможным с PowerShell в Windows 8. Я нашел некоторую информацию здесь и здесь. Я не эксперт PowerShell, но как программист, я уверен, вы могли бы найти способ (и, возможно, разместить его в качестве ответа здесь на других посмотреть).

-1
отвечен Peter 2023-03-08 20:52

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх