en de fr es ja it pt

27 сентября 2010 г.

Диалог выбора файла в bat скрипте

Реализация на ассемблере (MASM32) - выводит в консоль путь к файлу, который выбрал пользователь. Понадобилась мне в процессе написания одного bat-скрипта, нашел какие-то костыли на javascript'e - не понравилось. Да и лежащий рядок 4кб файл мне ни чуть не помешает.

p.s. да, bat не труъ, но под мою конкретную задачу подходит очень хорошо.



openfile.asm (читаем ;комментарии)
.386
.model flat,stdcall

Include windows.inc
Include kernel32.inc
Include masm32.inc
include comdlg32.inc
includelib comdlg32.lib
IncludeLib kernel32.lib
IncludeLib masm32.lib

.const
MAXSIZE equ 1024

.data
stitle db "Open",0
sfilter db "want.jar",0,"want.jar",0,0 ; показываем только want.jar, т.к. хотим чтобы пользователь указал именно путь к нему.
sdir db "%LOCALAPPDATA%\VirtualStore",0 ; где искать по умолчанию
ofn OPENFILENAME <>
buffer db MAXSIZE dup(0)

.code

WinMain PROC

mov ofn.lStructSize, SIZEOF ofn
mov ofn.lpstrInitialDir, offset sdir
mov ofn.lpstrFile, OFFSET buffer
mov ofn.nMaxFile, MAXSIZE
mov ofn.lpstrTitle, offset stitle
mov ofn.lpstrFilter, offset sfilter
mov ofn.Flags, OFN_DONTADDTORECENT or OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY

invoke GetOpenFileName, addr ofn

.if eax==TRUE
invoke StdOut, ofn.lpstrFile
invoke ExitProcess,0
.endif

invoke ExitProcess,1

WinMain ENDP
end WinMain


Пример .bat с использованием:
@echo off
cls

FOR /F "tokens=*" %%r IN ('openfile.exe') DO call :patch %%r
pause
exit /B

:patch
echo I will patch %*

Комментариев нет:

Отправить комментарий