用于显示桌面应用程序快捷方式目标的批处理代码

用于显示桌面应用程序快捷方式目标的批处理代码

我一直在努力扩展一个基本的批处理程序来提取 IP 信息,以包含与我工作中的 IT 部门相关的其他信息。我的部门在全国范围内为最终用户和我们的服务器上的 Cisco 设备进行故障排除。到目前为止,我已经有文件提取了 ipconfig 详细信息和 mac 地址,但有一些排除项。这是我到目前为止的代码:

@echo off
echo Listed below is your network IP information and physical MAC address.
echo\
echo I am logged as %UserName%.
echo My computer's name is %ComputerName%.
echo My IP settings are
ipconfig | find "." | find /i /v ""
echo\
echo My Mac address is
getmac | find /i /v "disconnected" | find /i /v "not present"
echo\
echo Provide this information to the IT team. 
echo Press the Space bar to close this window.
echo\
pause > nul

我一直在浏览这里和其他类似的网站,寻找我可以修改的相关示例,但显然我对非思科的东西很不擅长。这是从另一篇文章中提取的新代码,目前是它自己的批处理:

@echo off

Setlocal Enableextensions
Setlocal Enabledelayedexpansion

for /r %%X in (*.URL) do (
  set shortcut="%%X"
  echo SHORTCUT: !shortcut!


     for /f "tokens=2 delims==" %%i in ('findstr URL !shortcut!') do (
     set URL=%%i
 echo.
 echo URL PATH: !URL!
 )

echo ----------------------------------------------------------------
echo.
)

:end
Pause

运行此程序得到的输出是:

SHORTCUT: "C:\Users\***\Desktop\Application Catalog, IE only.url"

URL PATH: http://***/cmapplicationcatalog/#/SoftwareLibrary/AppListPageView.xaml
----------------------------------------------------------------

SHORTCUT: "C:\Users\***\Desktop\Test Yahoo.url"

URL PATH: http://www.yahoo.com/
----------------------------------------------------------------

Press any key to continue . . .

*** 是我截断的路径。

当我让它工作时,我会将它们组合在一起。我试图从第二批中获取的是每个 PC 桌面上的一个特定文件,我们称之为 CDK Drive,以便提取其目标信息。目标是完整的 IP 地址(http://*.我需要的快捷方式的目标类型是Application,文件本身的类型是Shortut(.lnk)。目标的示例如下:

"C:\Program Files (x86)\Internet Explorer\iexplore.exe" http://***.**.209.42/bin/start/wsStart.application

我正在尝试提供尽可能多具体的信息,以便能够获得最准确的帮助。

先感谢您。

更新:因此,我在使用 Powershell 并由批处理运行它方面取得了一些进展。这是我迄今为止的 Powershell 代码,它“几乎”按预期工作。

function Get-StartMenuShortcuts
{
$Shortcuts = Get-ChildItem -Recurse "$Env:C:\Users\alexandm\Desktop\Batching" -Include *.lnk
$Shell = New-Object -ComObject WScript.Shell

foreach ($Shortcut in $Shortcuts)
{
$Properties = @{
ShortcutName = $Shortcut.Name
Target = $Shell.CreateShortcut($Shortcut).targetpath
}

New-Object PSObject -Property $Properties
}

[Runtime.InteropServices.Marshal]::ReleaseComObject($Shell) | Out-Null
}

$Output = Get-StartMenuShortcuts
$Output

从批处理运行时,我得到的输出显示了基本目标路径,该路径恰好是 iexplore.exe,但它没有提供包括我们添加的 IP 地址在内的整个目标路径。知道我遗漏了什么吗?

答案1

您的 powershell 代码可能如下:

$shell = New-Object -COM WScript.Shell
Get-ChildItem -Recurse "$env:UserProfile\Desktop\*.lnk","$env:PUBLIC\Desktop\*.lnk" | 
    ForEach-Object {
        $shortcut = $shell.CreateShortcut($_.FullName)
        $Args = $shortcut.Arguments
        if ( $Args -match [system.Uri]::SchemeDelimiter) {
            "shortcut: $($_.Name)"
            "exe path: $($shortcut.TargetPath)"
            "link URL: $($Args)"
            "---"
        }
    }

省略了所有这些功能对象东西(假设这是一个一次性的脚本,它只是展示结果)。

  • [system.Uri]::SchemeDelimiter Uri 字段,请参阅.NETURI 类用于简单检查是否$shortcut.Arguments可以URI(指定将通信协议方案与的地址部分分隔开的字符URI);按照目前的写法,脚本并不关心协议及其有效性。

更新. 现在处理.lnk来自的所有文件夹当前用户的桌面民众桌面递归地

相关内容