批量更改快捷方式目标?

批量更改快捷方式目标?

我有数百个网站的快捷方式,其目标如下:

C:\Users\Herb\AppData\Local\Google\Chrome\Application\chrome.exe www.somesite.com/foo

我刚刚升级到 Windows 8,Chrome 可执行文件现在存储在 Program Files 中;因此,为了使这些快捷方式正常工作,我必须将它们更改为:

“C:\Program Files (x86)\Google\Chrome\Application\chrome.exe” www.somesite.com/foo

有什么方法可以自动执行此更改?我是一名程序员,但很少使用 Windows 脚本。

答案1

我最近也遇到了类似的问题,于是决定按照最初的要求编写修改链接的脚本。也许其他人会觉得这很有用。这是一个基于前面提到的链接,但有一些改进(仅在前导路径名上触发,修改现有链接而不是删除/创建,具有试运行模式等)。

我对 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()
      }
   }
}

答案2

制作

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

指向的目录连接点

C:\Program Files (x86)\Google

使用链接, 问题解决了。

答案3

我有一些疯狂的网络管理员,他们总是将 UNC 路径更改为我的工作目录。使用示例域来说明这些更改,我发誓在过去 6 个月中,我至少看到过以下四个不同的 UNC 指向同一目录和文件:

\\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 Reader 打开 PDF 文件到特定页面):

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

这些目录位于企业网络共享上,我无权更改共享的 UNC 或使用任何类型的重定向,因此修改 Terrence 的答案对我来说最有效。由于我是 PowerShell 新手,所以我必须弄清楚如何使用它,因此我将逐步说明如何使用我对他的出色脚本的修改:

  1. 使用记事本,将以下代码粘贴到新文本文档中。将文档另存为 Edit-LNK-files.ps1,保存到易于查找且输入简短的目录中(例如 C:\MyPowerShells)
  2. 在记事本中,编辑$oldString参数(第 4 行)以包含要查找的字符串,并$newString编辑参数(第 7 行)以包含要替换的字符串。编辑$searchPath参数(第 10 行)以指定要编辑的 .LNK 文件所在的目录。 或者,您可以稍后根据需要通过从 PowerShell 命令行运行脚本并编辑参数来指定这些变量(IE& "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 键执行“试运行”(Terrence,这是个好主意!但我将其改为默认值)
  8. 查看“试运行”的输出 - 路径是否进行了适当更改?如果没有,请适当更改$newString$oldString变量,然后重复步骤 6-8 以重复试运行。否则,继续执行步骤 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 快捷方式文件,并在目标框中使用以下内容

\\contoso\Projects\rhinoexhibit\rhinospecifications.pdf

\\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"

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

答案4

我为此编写了一个 AutoIt 脚本:

将在您指定的目录中指定的 LNK 的所有 Target 和 WorkingDir 字段中用您指定的所需替换子字符串替换所有指定的子字符串。还具有模拟模式,可在文本文件中显示替换的效果,以便您可以看到找到了什么以及您拥有哪些 LNK 目标子字符串匹配。

https://www.autoitscript.com/forum/topic/181812-lnksubstringreplacer-link-lnk-path-substring-replacer/ - LNKSubstringReplacer 链接 LNK 路径子字符串替换器

相关内容