[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 请教批处理如何限制文件扩展名?

  1. @ECHO OFF
  2. setlocal enabledelayedexpansion
  3. call :File_Input "files" "输入文件"&& echo 输入文件=!输入文件!
  4. echo Files=%files%
  5. echo 调试结束&&pause&&exit
  6. goto :eof
  7. ::**************************************************************
  8. ::       输入文件名称
  9. ::**************************************************************
  10. :File_Input
  11. Title ★★★★★ %~n0 %~2 ★★★★★
  12. if "%2" NEQ "" set %~2=No
  13. for /f "delims=" %%a in ('mshta "about:<input type=file id=file><script>file.click();new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(file.value);close();</script>"') do set %~1="%%a"
  14. if "%~1" NEQ "" if "%2" NEQ "" set %~2=Yes
  15. Title ★★★★★ %~n0  ★★★★★
  16. goto :eof
复制代码

好象有个com对象可以限制的扩展名的,但是记不得了

要不你检查扩展名不对就返回重新选择,循环

QQ 20147578

TOP

不限制文件类型,可选文件件多了体验不好。懒

TOP

本帖最后由 jyswjjgdwtdtj 于 2023-5-14 16:51 编辑

方案1
用回2000或xp 有系统自带的com组件
方案2
用vbs调用vba(极其复杂)
方案3
在js里加判断循环
方案5
用vbs调用ie
  1. <input type=file accept=".xls"/>
复制代码
方案4
用ps .net库里没有我倒立吃屎
总之不用bat咋都方便

TOP

  1. Set objDialog = CreateObject("SAFRCFileDlg.FileSave")
  2. objDialog.FileName = "test"
  3. objDialog.FileType = ".txt"
复制代码
  1. Set objDialog = CreateObject("UserAccounts.CommonDialog")
  2. objDialog.Filter = "VBS File|*.vbs"
复制代码
找了2个com对象,可惜在win7x64中均测试失败

QQ 20147578

TOP

只会点批处理,别的不会,

TOP

本帖最后由 jyswjjgdwtdtj 于 2023-6-3 13:14 编辑

嗯 突然想起来之前做过一个
  1. //jscript or javascript
  2. //ie
  3. function getvbsfilepath(){
  4. return new ActiveXObject("excel.application").GetOpenFileName("VBScript Files (*.vbs *.vbe),*.vbs;*.vbe",1,"打开VBScript脚本文件")
  5. }
  6. function savevbsfilepath(filename){
  7. return new ActiveXObject("excel.application").GetSaveAsFilename(filename,"VBScript Files (*.vbs *.vbe),*.vbs;*.vbe",1,"另存为VBScript脚本文件")
  8. }
复制代码
调用excel的原生方法 即vba里的application对象
所以不用安装vba 有wps或office就行
  1. @ECHO OFF
  2. setlocal enabledelayedexpansion
  3. call :File_Input "files" "输入文件"&& echo 输入文件=!输入文件!
  4. echo Files=%files%
  5. echo 调试结束&&pause&&exit
  6. goto :eof
  7. ::**************************************************************
  8. ::       输入文件名称
  9. ::**************************************************************
  10. :File_Input
  11. Title ★★★★★ %~n0 %~2 ★★★★★
  12. if "%2" NEQ "" set %~2=No
  13. for /f "delims=" %%a in ('mshta "about:<script>new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(new ActiveXObject('excel.application').GetOpenFileName('VBScript Files (*.vbs *.vbe),*.vbs;*.vbe',1,'打开VBScript脚本文件'));close();</script>"') do set %~1="%%a"
  14. if "%~1" NEQ "" if "%2" NEQ "" set %~2=Yes
  15. Title ★★★★★ %~n0  ★★★★★
  16. goto :eof
复制代码

TOP

非常感谢,代码可用。但有点美中不足,文件选择窗口在批处理下面,能设置到最前面吗?

TOP

回复 8# y6383289


    我这里不会呀 不过之前也遇到这个问题 不知道怎么解决

TOP

试试那个修改cmd窗口大小和位置的啥命令的,mode还是啥的

QQ 20147578

TOP


如果mshta脚本采用ie10+引擎新增的html5功能,即可令用户品尝到‘文件类型筛选’和‘文件多选’等诸多美餐...
以下代码中显式指定ie10引擎版本,否则mshta默认采用ie7。input标签中的属性multiple和accept分别对应‘文件多选’和‘文件类型’两个选项,如要文件单选,删除multiple即可。
  1. <!-- :
  2. @echo off
  3. for /f "delims=" %%F in ('mshta "%~f0" ') do (echo,%%F)
  4. pause&exit/b
  5. -->
  6. <meta http-equiv="x-ua-compatible" content="ie=10">
  7. <input type=file id=f multiple accept=".txt,.bat,.cmd,.hta,.js,.vbs">
  8. <script>
  9.    f.click();
  10.    new ActiveXObject('scripting.filesystemobject').getstandardstream(1).write(f.value ? f.value : '');
  11.    close();
  12. </script>
复制代码
1

评分人数

TOP

mode 改变窗口大小

TOP

能否改为调用形式?

TOP

如果mshta脚本采用ie10+引擎新增的html5功能,即可令用户品尝到‘文件类型筛选’和‘文件多选’等诸多美餐 ...
aloha20200628 发表于 2023-6-5 14:13

能否改为调用形式

TOP

试试那个修改cmd窗口大小和位置的啥命令的,mode还是啥的
czjt1234 发表于 2023-6-4 08:44




mode 改变窗口大小

TOP

返回列表