1.

Solve : [Batch] Extracting targets from shortcuts Links?

Answer»

Hi 
I have READ this topic ==> How to read target of .lnk file with COMMAND line
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
::*************************************************************************Hi 
This the updated VERSION : I added the *.url extension to be scanned too   
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
::*************************************************************************Why does it write the same TEMP vbs file EVERY time it needs to process a shortcut, and delete it again?
Quote from: 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?
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
::*************************************************************************It still does it. Quote from: Salmon Trout on February 09, 2017, 03:50:36 AM
It still does it.
Ok
Can you provide me a better solution with code to optimize this later
Thank you !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.Ok  I think this is better 
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
::*************************************************************************


Discussion

No Comment Found