batch-filecmd

Get the Windows Download folder's path (Download shell folder) in a batch-file


How do I get the Windows Download Shell Folder in a variable?

According to this. I tried:

@echo off
SETLOCAL

FOR /F "usebackq" %%f IN (`PowerShell -NoProfile -Command "Write-Host([Environment]::GetFolderPath('{374DE290-123F-4565-9164-39C4925E467B}'))"`) DO ( SET "DOWNLOAD_FOLDER=%%f" )

@ECHO %DOWNLOAD_FOLDER%
pause

It doesn't work.


Solution

  • Here is a batch code to get several directories for downloads which I think is self-explaining.

    This batch code was tested only on Windows XP x86 with Internet Explorer 8.

    @echo off
    setlocal EnableExtensions DisableDelayedExpansion
    
    set "Reg32=%SystemRoot%\System32\reg.exe"
    if not "%ProgramFiles(x86)%" == "" set "Reg32=%SystemRoot%\SysWOW64\reg.exe"
    
    set "DownloadDirectory="
    for /F "skip=4 tokens=3*" %%U in ('%Reg32% query "HKCU\Software\Microsoft\Internet Explorer" /v "Download Directory" 2^>nul') do (
        set "DownloadDirectory=%%V"
        goto GetSaveDir
    )
    
    :GetSaveDir
    set "SaveDirectory="
    for /F "skip=4 tokens=3*" %%U in ('%Reg32% query "HKCU\Software\Microsoft\Internet Explorer\Main" /v "Save Directory" 2^>nul') do (
        set "SaveDirectory=%%V"
        goto OutputResults
    )
    
    :OutputResults
    cls
    echo/
    
    echo Download directory of user account is:
    echo/
    echo    %USERPROFILE%\Downloads
    echo/
    echo/
    
    if not defined DownloadDirectory goto OutputSaveDir
    if "%DownloadDirectory:~-1%" == "\" set "DownloadDirectory=%DownloadDirectory:~0,-1%"
    echo Download directory of Internet Explorer is:
    echo/
    echo    %DownloadDirectory%
    echo/
    echo/
    
    :OutputSaveDir
    if not defined SaveDirectory goto EndBatch
    if "%SaveDirectory:~-1%" == "\" set "SaveDirectory=%SaveDirectory:~0,-1%"
    echo Save directory of Internet Explorer is:
    echo/
    echo    %SaveDirectory%
    
    :EndBatch
    endlocal
    

    UPDATE

    But for Windows Vista/7/8/8.1/10 an enhanced batch file is needed as the directory for downloads is defined different on those later Windows versions with Internet Explorer 8/9/10/11.

    The batch code below works on all Windows OS starting with Windows 2000.

    It outputs the directories found on hard disk (first one) or in Windows registry (remaining three).

    @echo off
    setlocal EnableExtensions DisableDelayedExpansion
    
    set "Reg32=%SystemRoot%\System32\reg.exe"
    if not "%ProgramFiles(x86)%" == "" set "Reg32=%SystemRoot%\SysWOW64\reg.exe"
    
    set "DownloadShellFolder="
    for /F "skip=1 tokens=1,2*" %%T in ('%Reg32% query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "{374DE290-123F-4565-9164-39C4925E467B}" 2^>nul') do (
        if /I "%%T" == "{374DE290-123F-4565-9164-39C4925E467B}" (
            set "DownloadShellFolder=%%V"
            goto GetDownloadDirectory
        )
    )
    
    :GetDownloadDirectory
    set "DownloadDirectory="
    for /F "skip=1 tokens=1,2,3*" %%S in ('%Reg32% query "HKCU\Software\Microsoft\Internet Explorer" /v "Download Directory" 2^>nul') do (
        if /I "%%S" == "Download" (
            if /I "%%T" == "Directory" (
                set "DownloadDirectory=%%V"
                goto GetSaveDirectory
            )
        )
    )
    
    :GetSaveDirectory
    set "SaveDirectory="
    for /F "skip=1 tokens=1,2,3*" %%S in ('%Reg32% query "HKCU\Software\Microsoft\Internet Explorer\Main" /v "Save Directory" 2^>nul') do (
        if /I "%%S" == "Save" (
            if /I "%%T" == "Directory" (
                set "SaveDirectory=%%V"
                goto OutputResults
            )
        )
    )
    
    :OutputResults
    cls
    echo/
    
    if not exist "%USERPROFILE%\Downloads" goto OutputShellFolder
    echo Download directory of user account is:
    echo/
    echo   %USERPROFILE%\Downloads
    echo/
    echo/
    
    :OutputShellFolder
    if not defined DownloadShellFolder goto OutputDownloadDir
    if "%DownloadShellFolder:~-1%" == "\" set "DownloadShellFolder=%DownloadShellFolder:~0,-1%"
    echo Download shell folder of user account is:
    echo/
    echo   %DownloadShellFolder%
    echo/
    echo/
    
    :OutputDownloadDir
    if not defined DownloadDirectory goto OutputSaveDir
    if "%DownloadDirectory:~-1%" == "\" set "DownloadDirectory=%DownloadDirectory:~0,-1%"
    echo Download directory of Internet Explorer is:
    echo/
    echo   %DownloadDirectory%
    echo/
    echo/
    
    :OutputSaveDir
    if not defined SaveDirectory goto EndBatch
    if "%SaveDirectory:~-1%" == "\" set "SaveDirectory=%SaveDirectory:~0,-1%"
    echo Save directory of Internet Explorer is:
    echo/
    echo   %SaveDirectory%
    
    :EndBatch
    endlocal
    

    For understanding the used commands and how they work, open a command prompt window, execute there the following commands, and read entirely all help pages displayed for each command very carefully.