我有数百个网站的快捷方式,其目标如下:
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
答案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 新手,所以我必须弄清楚如何使用它,因此我将逐步说明如何使用我对他的出色脚本的修改:
- 使用记事本,将以下代码粘贴到新文本文档中。将文档另存为 Edit-LNK-files.ps1,保存到易于查找且输入简短的目录中(例如 C:\MyPowerShells)
- 在记事本中,编辑
$oldString
参数(第 4 行)以包含要查找的字符串,并$newString
编辑参数(第 7 行)以包含要替换的字符串。编辑$searchPath
参数(第 10 行)以指定要编辑的 .LNK 文件所在的目录。 或者,您可以稍后根据需要通过从 PowerShell 命令行运行脚本并编辑参数来指定这些变量(IE& "C:\MyPowerShells\Edit-LNK-files.ps1" -oldString E:\ -newString D:\ -searchPath "C:\My LNKs\"
- 以管理员身份运行 Windows Powershell:开始 > 所有程序 > 附件 > Windows PowerShell,右键单击 Windows PowerShell,然后单击以管理员身份运行
- 在 Powershell 中,键入
set-executionpolicy remotesigned
并按 Enter - 键入
Y
并按 Enter 以允许 PowerShell 运行您刚刚在记事本中创建的脚本(您可能希望在完成后将其改回以确保系统安全)。 - 类型
& "C:\MyPowerShells\Edit-LNK-files.ps1"
- 按 Enter 键执行“试运行”(Terrence,这是个好主意!但我将其改为默认值)
- 查看“试运行”的输出 - 路径是否进行了适当更改?如果没有,请适当更改
$newString
和$oldString
变量,然后重复步骤 6-8 以重复试运行。否则,继续执行步骤 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 路径子字符串替换器