Computer Hope

Microsoft => Microsoft DOS => Topic started by: Hackoo on February 08, 2017, 12:13:31 AM

Title: [Batch] Extracting targets from shortcuts Links
Post by: Hackoo on February 08, 2017, 12:13:31 AM
Hi  ;)
I have read this topic ==> How to read target of .lnk file with command line (http://www.computerhope.com/forum/index.php/topic,80659.15.html)
So; i want to share my solution in new topic instead of digging this later
Extract_Target_Link.bat
Code: [Select]
@echo off
Title Extracting targets files from links by Hackoo 2017
Mode con cols=50 lines=3 & color 9E
Set "Log=%~dp0TARGET_LINK_PATHS.txt"
If exist "%Log%" Del "%Log%"
Set "Folders=%UserProfile%\Desktop %Public%\Desktop %AllUsersprofile%"
For %%F in (%Folders%) Do (
Cls
Echo *****************************************************************
Echo "%%F"
(echo; & echo        Scanning "%%F" ...)>CON
Echo *****************************************************************
Echo(
For /f "delims=" %%L in ('Dir /b /s "%%F\*.lnk"') do (
echo "%%L" & Call:ExtractTarget "%%L"
echo  --------------------------------------------------------
)
)>>"%Log%"
Start "" "%Log%"
Exit
::*************************************************************************
:ExtractTarget <Link>
(
echo set Ws = CreateObject("WScript.Shell"^)
echo set Lnk = Ws.Createshortcut(WScript.Arguments(0^)^)
echo WScript.echo Chr(34^) ^& Lnk.TargetPath ^& Chr(34^)
)>"%Tmp%\Tmp.vbs"
cscript //nologo "%Tmp%\Tmp.vbs" "%~1"
Del "%Tmp%\Tmp.vbs"
Exit /b
::*************************************************************************
Title: Re: [Batch] Extracting targets from shortcuts (*.url) and (*.lnk)
Post by: Hackoo on February 08, 2017, 05:19:28 AM
Hi  :)
This the updated version : I added the *.url extension to be scanned too  ;)  ;D
Code: [Select]
@echo off
Title Extracting target from shortcut (*.url) and (*.lnk) by Hackoo 2017
Mode con cols=62 lines=3 & color 9E
Set "Log=%~dp0TARGET_LINK_PATHS.txt"
Set "Links=url lnk"
If exist "%Log%" Del "%Log%"
Set "Folders=%UserProfile%\Desktop %Public%\Desktop %AllUsersprofile%"
For %%i in (%Links%) Do (
For %%F in (%Folders%) Do (
Cls
Echo *****************************************************************
Echo "%%F" for "*.%%i" Links
(echo. & echo     Scanning "%%F" for "*.%%i" Links ...)>CON
Echo *****************************************************************
Echo;
For /f "delims=" %%L in ('Dir /b /s "%%F\*.%%i"') do (
echo "%%L" & Call:ExtractTarget "%%L"
echo  --------------------------------------------------------
)
)
)>>"%Log%"
Start "" "%Log%"
Exit
::*************************************************************************
:ExtractTarget <Link>
(
echo set Ws = CreateObject("WScript.Shell"^)
echo set Lnk = Ws.Createshortcut(WScript.Arguments(0^)^)
echo WScript.echo Chr(34^) ^& Lnk.TargetPath ^& Chr(34^)
)>"%Tmp%\Tmp.vbs"
cscript //nologo "%Tmp%\Tmp.vbs" "%~1"
Del "%Tmp%\Tmp.vbs"
Exit /b
::*************************************************************************
Title: Re: [Batch] Extracting targets from shortcuts Links
Post by: Salmon Trout on February 08, 2017, 12:54:10 PM
Why does it write the same temp vbs file every time it needs to process a shortcut, and delete it again?
Title: Re: [Batch] Extracting targets from shortcuts Links
Post by: Hackoo on February 09, 2017, 03:44:45 AM
Why does it write the same temp vbs file every time it needs to process a shortcut, and delete it again?
Thank you for your remark ;) and i changed it to this code :
Code: [Select]
@echo off
Title Extracting target from shortcut (*.url) and (*.lnk) by Hackoo 2017
Mode con cols=62 lines=3 & color 9E
Set "Log=%~dp0TARGET_LINK_PATHS.txt"
Set "TmpVbs=%Tmp%\%~n0.vbs"
Set "Links=url lnk"
If exist "%Log%" Del "%Log%"
Set "Folders=%UserProfile%\Desktop %Public%\Desktop %AllUsersprofile%"
For %%i in (%Links%) Do (
For %%F in (%Folders%) Do (
Cls
Echo *****************************************************************
Echo "%%F" for "*.%%i" Links
(echo. & echo     Scanning "%%F" for "*.%%i" Links ...)>CON
Echo *****************************************************************
Echo;
For /f "delims=" %%L in ('Dir /b /s "%%F\*.%%i"') do (
echo "%%L" & Call:ExtractTarget "%%L"
echo  --------------------------------------------------------
)
)
)>>"%Log%"
Start "" "%Log%"
If Exist "%Tmpvbs%" Del "%Tmpvbs%"
Exit
::*************************************************************************
:ExtractTarget <Link>
(
echo set Ws = CreateObject("WScript.Shell"^)
echo set Lnk = Ws.Createshortcut(WScript.Arguments(0^)^)
echo WScript.echo Chr(34^) ^& Lnk.TargetPath ^& Chr(34^)
)>"%Tmpvbs%"
cscript //nologo "%Tmpvbs%" "%~1"
Exit /b
::*************************************************************************
Title: Re: [Batch] Extracting targets from shortcuts Links
Post by: Salmon Trout on February 09, 2017, 03:50:36 AM
It still does it.
Title: Re: [Batch] Extracting targets from shortcuts Links
Post by: Hackoo on February 09, 2017, 06:40:51 AM
It still does it.
Ok :'(
Can you provide me a better solution with code to optimize this later
Thank you !
Title: Re: [Batch] Extracting targets from shortcuts Links
Post by: Salmon Trout on February 09, 2017, 07:36:00 AM
You wrote that code, didn't you? Just move the part that creates the vbscript out of the subroutine and put it at the start of the script.
Title: Re: [Batch] Extracting targets from shortcuts Links
Post by: Hackoo on February 09, 2017, 09:05:25 AM
Ok  ;) I think this is better  ;D
Code: [Select]
@echo off
Title Extracting target from shortcut (*.url) and (*.lnk) by Hackoo 2017
Mode con cols=62 lines=3 & color 9E
Set "Log=%~dp0TARGET_LINK_PATHS.txt"
Set "TmpVbs=%Tmp%\%~n0.vbs"
::************************************************************************
(
echo set Ws = CreateObject("WScript.Shell"^)
echo set Lnk = Ws.Createshortcut(WScript.Arguments(0^)^)
echo WScript.echo Chr(34^) ^& Lnk.TargetPath ^& Chr(34^)
)>"%Tmpvbs%"
::************************************************************************
Set "Links=url lnk"
Set "Folders=%UserProfile%\Desktop %Public%\Desktop %AllUsersprofile%"
For %%i in (%Links%) Do (
For %%F in (%Folders%) Do (
Cls
Echo *****************************************************************
Echo "%%F" for "*.%%i" Links
(echo. & echo     Scanning "%%F" for "*.%%i" Links ...)>CON
Echo *****************************************************************
Echo;
For /f "delims=" %%L in ('Dir /b /s "%%F\*.%%i"') do (
echo "%%L" & Call:ExtractTarget "%%L"
echo  --------------------------------------------------------
)
)
)>>"%Log%"
Start "" "%Log%"
If Exist "%Tmpvbs%" Del "%Tmpvbs%"
Exit
::*************************************************************************
:ExtractTarget <Link>
cscript //nologo "%Tmpvbs%" "%~1"
Exit /b
::*************************************************************************