Computer Hope
Microsoft => Microsoft DOS => Topic started 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
@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 ;) ;D
@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?
-
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 :
@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.
-
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 ;D
@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
::*************************************************************************