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


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.