데스크톱 응용 프로그램 바로 가기의 대상을 표시하는 배치 코드


0

직장 내 IT 부서와 관련된 다른 정보를 포함하기 위해 IP 정보를 가져 오기 위해 기본 배치를 확장하려고 노력하고 있습니다. 내 부서는 최종 사용자 및 서버에서 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 . . .

*** 내가 잘린 경로입니다.

내가 작동하게되면 이것들을 모두 결합 할 것입니다. 두 번째 배치에서 얻으려는 것은 대상 정보를 가져 오기 위해 CDK 드라이브라고하는 모든 PC 데스크톱의 특정 파일입니다. 대상에는 내가 필요한 완전한 IP 주소 (http : // * .. **. * /)가 있습니다. 바로 가기의 대상 유형은 응용 프로그램이고 파일 자체의 유형은 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 주소를 포함하여 전체 대상 경로를 제공하지는 않습니다. 내가 무엇을 놓치고 있는지 아십니까?


이미 가지고있는 코드에 어떤 문제가 있습니까?
— DavidPostill

달리 .url또는 .website링크 와 달리 .lnkshorcut은 일반 텍스트 파일이 아닙니다. 예를 들어 COM물체를
— JosefZ

내가 가진 모든 코드는 이미 위에 포함되어 있습니다. "COM 객체"는 필요한 특정 파일 및 대상 경로에 여기에 사용하려면 어떻게해야합니까? 솔직히, 나는 이와 같은 코드를 처음부터 빌드 할 수 없으며 심지어 수정조차 매우 새롭습니다.
— Michael Alexander

@JosefZ 필자는 생각대로 거의 작동하는 PowerShell 코드를 끝에 추가했습니다.
— Michael Alexander

답변:


0

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)"
            "---"
        }
    }

모든 기능 과 PSObject 기능을 생략 했습니다 (단순히 결과를 표시 하는 원샷 스크립트라고 가정 ).

  • [system.Uri]::SchemeDelimiter URI 필드 참조 .NETURI 클래스 단순히 여부를 확인하는 데 사용되는 $shortcut.Arguments일 수 URI(어드레스의 부분으로부터 상기 통신 프로토콜 방식을 구분 문자를 지정 URI); 현재 작성된 것처럼 스크립트는 프로토콜과 유효성에 신경 쓰지 않습니다.

업데이트되었습니다 . 이제 모든 처리 .lnk파일에서 폴더 현재 사용자 의 데스크톱 과 에서 공공 바탕 화면 재귀 .


나중에 이것을 테스트하고 그것이 어떻게 작동하는지 볼 필요가 있습니다. 예, 이것은 단지 결과를 얻기위한 원샷 명령입니다. 결국 배치를 실행할 때 ipconfig 정보, mac 주소 및이 pwrshell이 ​​모든 사용자가 가진 바로 가기에서 대상 데이터를 제공합니다.
— Michael Alexander

나는 그것을 그대로 실행하려고 시도했지만 출력을 얻지 못했습니다. "CDK Drive"라는 바로 가기를 참조하도록 수정해야합니까? 땜질을 시도하고 오류 만 관리했습니다. 독자적으로 그리고 배치에서 판독을 시도했습니다. 공백. 또한 결과를 보려면 powershell을 열어 두려면 'pause'명령과 동등한 항목을 추가해야합니까?
— Michael Alexander

pause유효한 Powershell 명령입니다. 당신이 있는지 확인 .lnk오히려입니다 공공 바탕 화면, 시도 Get-ChildItem "$env:PUBLIC\Desktop\*.lnk".
— JosefZ

@MichaelAlexander 업데이트 된 답변을 확인하십시오.
— JosefZ

알았어 감사합니다. 이제 해당 링크의 전체 대상 경로를 얻습니다. 가능한 경우 다음으로 시도한 부분은 "http; // 123.45.67.89"ip 주소 만 필터링하거나 추출하는 것입니다. 그게 할 수있는 일입니까? 전체 사용자 링크에서 IP 주소를 찾을 필요가 없도록 가능한 한 사용자 친화적이고 간단하게 만들려고합니다. 내가 일하는 일부 사람들은 IP 주소가 LOL인지 알지 못합니다.
— Michael Alexander
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.