1

Тема: CMD/BAT: использование стандартных GUI-диалогов выбора папки и файла

Использование стандартного диалога выбора папки (на основе «.BrowseForFolder()»).

@echo off
setlocal

for /f "tokens=2 delims=:" %%i in ('chcp') do (
    set sPrevCP=%%i
    chcp 1251 >nul
)

for /f "usebackq delims=" %%i in (
    `@"%systemroot%\system32\mshta.exe" "javascript:var objShellApp = new ActiveXObject('Shell.Application');var Folder = objShellApp.BrowseForFolder(0, 'SELECT FOLDER',1, '::{20D04FE0-3AEA-1069-A2D8-08002B30309D}');try {new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(Folder.Self.Path)};catch (e){};close();" ^
    1^|more`
) do set sFolderName=%%i

chcp %sPrevCP% >nul

if defined sFolderName (
    echo Выбрана папка: [%sFolderName%].
) else (
    echo Папка не была выбрана.
)

endlocal
exit /b 0

Автор идеи — Аскет.

2

Re: CMD/BAT: использование стандартных GUI-диалогов выбора папки и файла

Использование стандартного диалога выбора файла (на основе «<INPUT type='file' …>»).

@echo off
setlocal

for /f "tokens=2 delims=:" %%i in ('chcp') do (
    set sPrevCP=%%i
    chcp 1251 >nul
)

for /f "usebackq delims=" %%i in (
    `@"%systemroot%\system32\mshta.exe" "about:<FORM><INPUT type='file' name='qq'></FORM><script>document.forms[0].elements[0].click();var F=document.forms[0].elements[0].value;try {new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(F)};catch (e){};close();</script>" ^
    1^|more`
) do set sFileName=%%i

chcp %sPrevCP% >nul

if defined sFileName (
    echo Выбран файл: [%sFileName%].
) else (
    echo Файл не был выбран.
)

endlocal
exit /b 0

Автор идеи — Аскет.