显示可以让用户打开或保存文件的标准对话框.
FileSelectFile, OutputVar , Options, RootDir\Filename, Title, Filter
用来保存用户选择的文件名的输出变量的名称. 如果用户取消了对话框(即不想选择文件), 则此变量被置空.
如果为空或省略, 则默认为零, 相当于没有指定下面的任意选项. 否则, 指定一个数字或下面列出的字母之一, 后面跟着一个数字(可选). 例如, M
, 1
和 M1
都是有效的(但不相同)
M: 多选. 指定字母 M 让用户可以使用 Shift+点击, Control+点击 或其他方法来选择多个文件. 要逐个提取文件, 请参阅此页面底部的例子.
S: 保存对话框. 指定字母 S 让对话框显示保存按钮代替打开按钮.
可以使用下面的数字. 要让多个数字同时生效, 请把它们加在一起. 例如, 如果要使用 1 和 2, 请指定数字 3.
1: 文件必须存在
2: 路径必须存在
8: 提示创建新文件
16: 提示覆盖文件
32 [v1.0.43.09+]:
按原样选择快捷方式(.lnk 文件) 而不把它们解析为它们的目标. 此选项也避免了通过文件夹快捷方式跳转到那个文件夹的情况.
由于 "提示覆盖" 选项只有保存对话框支持, 因此在没有 "提示创建" 选项的情况下指定该选项也会使 S 选项生效. 同样, 当 S 选项存在时, "提示创建" 选项也没有效果. 指定数字 24 可以启用对话框支持的任何一种提示类型.
如果为空或省略, 则起始目录将为默认值, 这可能操作系统版本有关(它很可能是之前使用 FileSelectFile 时用户最近选择的目录). 否则, 请指定下列的其中一个或两个:
RootDir: 根(起始) 目录, 如果未指定绝对路径, 则假定为 %A_WorkingDir% 中的子文件夹. [v1.0.43.10+]: 在 Windows XP/2003 或早期系统中, 还可以指定 CLSID 例如 ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
(即此电脑; 以前是我的电脑或计算机), 此时在 CLSID 后任何子目录都应该以反斜杠结尾(否则在最后一个反斜杠后的字符串会被解释为默认文件名, 这点在下面说明).
Filename: 初始显示对话框时在编辑区域的默认文件名. 只显示单独的文件名(不带路径). 要让对话框正确显示, 请确保不包含非法字符(例如 /<|:"
).
示例:
C:\My Pictures\Default Image Name.gif ; 同时使用了 RootDir 和 Filename. C:\My Pictures ; 只使用了 RootDir. My Pictures ; 只使用了 RootDir, 且它相对于当前工作目录. My File ; 只使用了 Filename(但如果已存在 "My File" 的文件夹, 则它会被认为是 RootDir).
如果为空或省略, 则默认为 "Select File - %A_ScriptName%"(即当前脚本的名称). 否则, 请指定文件选择窗口的标题.
如果为空或省略, 对话框将显示所有类型的文件. 并在 "文件类型" 下拉列表中提供 "所有文件 (*.*)" 和 "文本文档(*.txt)" 选项.
否则, 请指定一个字符串来指示对话框显示的文件类型, 例如 文本文档 (*.txt)
. 要在过滤器中包含多个文件扩展名, 请使用分号分隔它们, 例如 音频文件 (*.wav; *.mp2; *.mp3)
. 在这个例子中, "文件类型" 下拉列表中有指定的字符串和 "所有文件 (*.*)" 作为选项.
[v1.1.04+]: 此命令失败时会抛出异常. 想了解更多信息, 请参阅运行时错误.
如果用户没有选择文件却解除了对话框(例如按下了取消按钮), 则 ErrorLevel 被置为 1. 如果系统拒绝显示对话框(罕见), 那么它也被设置为 1. 否则被置为 0.
文件选择对话框通常是这样的:
如果用户什么都没选(例如点击了取消), 则 OutputVar 被置空.
如果没有启用多选, 则 OutputVar 被设置为用户选择的单个文件的完整路径和名称.
如果使用了 M 选项(多选), 则 OutputVar 被设置为项目列表, 除了最后一个项目外的每个项目后都跟着换行符(`n). 列表中的首个项目是包含所有选择文件的路径(此路径仅在为根目录时才以反斜杠结尾, 例如 C:\). 其他项为选择的文件名(不带路径). 例如:
C:\My Documents\New Folder [这是下面所有文件所在的路径] test1.txt [这些是不含路径的文件名] test2.txt ... 等等.
(此页面底部的例子演示了如何逐个提取这些文件.)
如果启用了多选, 则所有选择文件名的总长度被限制为 64 KB. 不过这通常足够容纳几千个文件, 如果超出此限制则 OutputVar 会被置空.
GUI 窗口可以使用 Gui +OwnDialogs 的方法显示文件选择模式对话框. 模式对话框在其消失之前会阻止用户与 GUI 窗口进行交互.
[v1.0.25.06+]: 多选选项 "4" 已过时. 然而, 考虑到和旧脚本的兼容, 这个选项仍然可用. 具体是, 如果用户只选择了一个文件, 则 OutputVar 会包含这个文件的完整路径和名称跟着换行符(`n). 如果用户选择了多个文件, 则格式和上面描述的 M 选项相同, 不过最后一项也会以换行符(`n) 结束.
FileSelectFolder, MsgBox, InputBox, ToolTip, GUI, CLSID 列表, 解析循环, SplitPath
此外, 操作系统提供了标准的对话框让用户选取字体, 颜色或图标. 使用 DllCall() 可以显示这些对话框, 演示的例子请参阅 GitHub.
FileSelectFile, SelectedFile, 3, , Open a file, Text Documents (*.txt; *.doc) if (SelectedFile = "") MsgBox, The user didn't select anything. else MsgBox, The user selected the following:`n%SelectedFile%
CLSID 的例子(需要 XP/2003 或早期系统). 允许用户在回收站中选择一个文件. 注意, 这个例子只适用于 Windows XP/2003 或更早的操作系统.
FileSelectFile, OutputVar,, ::{645FF040-5081-101B-9F08-00AA002F954E} ; 回收站.
FileSelectFile, files, M3 ; M3 = 选择多个现有文件. if (files = "") { MsgBox, The user pressed cancel. return } Loop, parse, files, `n { if (A_Index = 1) MsgBox, The selected files are all contained in %A_LoopField%. else { MsgBox, 4, , The next file is %A_LoopField%. Continue? IfMsgBox, No, break } } return