
标题: [文件操作] 请教批处理如何限制文件扩展名? [打印本页]
作者: y6383289 时间: 2023-5-11 20:46 标题: 请教批处理如何限制文件扩展名?
- @ECHO OFF
- setlocal enabledelayedexpansion
- call :File_Input "files" "输入文件"&& echo 输入文件=!输入文件!
- echo Files=%files%
- echo 调试结束&&pause&&exit
-
-
- goto :eof
-
- ::**************************************************************
- :: 输入文件名称
- ::**************************************************************
- :File_Input
- Title ★★★★★ %~n0 %~2 ★★★★★
- if "%2" NEQ "" set %~2=No
- 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"
- if "%~1" NEQ "" if "%2" NEQ "" set %~2=Yes
- Title ★★★★★ %~n0 ★★★★★
- goto :eof
复制代码
作者: czjt1234 时间: 2023-5-14 15:05
好象有个com对象可以限制的扩展名的,但是记不得了
要不你检查扩展名不对就返回重新选择,循环
作者: y6383289 时间: 2023-5-14 16:21
不限制文件类型,可选文件件多了体验不好。懒
作者: jyswjjgdwtdtj 时间: 2023-5-14 16:44
本帖最后由 jyswjjgdwtdtj 于 2023-5-14 16:51 编辑
方案1
用回2000或xp 有系统自带的com组件
方案2
用vbs调用vba(极其复杂)
方案3
在js里加判断循环
方案5
用vbs调用ie- <input type=file accept=".xls"/>
复制代码
方案4
用ps .net库里没有我倒立吃屎
总之不用bat咋都方便
作者: czjt1234 时间: 2023-5-15 09:40
- Set objDialog = CreateObject("SAFRCFileDlg.FileSave")
- objDialog.FileName = "test"
- objDialog.FileType = ".txt"
复制代码
- Set objDialog = CreateObject("UserAccounts.CommonDialog")
- objDialog.Filter = "VBS File|*.vbs"
复制代码
找了2个com对象,可惜在win7x64中均测试失败
作者: y6383289 时间: 2023-6-2 16:23
只会点批处理,别的不会
,
作者: jyswjjgdwtdtj 时间: 2023-6-2 18:04
本帖最后由 jyswjjgdwtdtj 于 2023-6-3 13:14 编辑
嗯 突然想起来之前做过一个- //jscript or javascript
- //ie
-
- function getvbsfilepath(){
- return new ActiveXObject("excel.application").GetOpenFileName("VBScript Files (*.vbs *.vbe),*.vbs;*.vbe",1,"打开VBScript脚本文件")
- }
- function savevbsfilepath(filename){
- return new ActiveXObject("excel.application").GetSaveAsFilename(filename,"VBScript Files (*.vbs *.vbe),*.vbs;*.vbe",1,"另存为VBScript脚本文件")
- }
复制代码
调用excel的原生方法 即vba里的application对象
所以不用安装vba 有wps或office就行- @ECHO OFF
- setlocal enabledelayedexpansion
- call :File_Input "files" "输入文件"&& echo 输入文件=!输入文件!
- echo Files=%files%
- echo 调试结束&&pause&&exit
-
-
- goto :eof
-
- ::**************************************************************
- :: 输入文件名称
- ::**************************************************************
- :File_Input
- Title ★★★★★ %~n0 %~2 ★★★★★
- if "%2" NEQ "" set %~2=No
- 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"
- if "%~1" NEQ "" if "%2" NEQ "" set %~2=Yes
- Title ★★★★★ %~n0 ★★★★★
- goto :eof
复制代码
作者: y6383289 时间: 2023-6-3 23:26
非常感谢,代码可用。但有点美中不足,文件选择窗口在批处理下面,能设置到最前面吗?
作者: jyswjjgdwtdtj 时间: 2023-6-4 07:54
回复 8# y6383289
我这里不会呀 不过之前也遇到这个问题 不知道怎么解决
作者: czjt1234 时间: 2023-6-4 08:44
试试那个修改cmd窗口大小和位置的啥命令的,mode还是啥的
作者: aloha20200628 时间: 2023-6-5 14:13
如果mshta脚本采用ie10+引擎新增的html5功能,即可令用户品尝到‘文件类型筛选’和‘文件多选’等诸多美餐...
以下代码中显式指定ie10引擎版本,否则mshta默认采用ie7。input标签中的属性multiple和accept分别对应‘文件多选’和‘文件类型’两个选项,如要文件单选,删除multiple即可。- <!-- :
- @echo off
- for /f "delims=" %%F in ('mshta "%~f0" ') do (echo,%%F)
- pause&exit/b
- -->
- <meta http-equiv="x-ua-compatible" content="ie=10">
- <input type=file id=f multiple accept=".txt,.bat,.cmd,.hta,.js,.vbs">
- <script>
- f.click();
- new ActiveXObject('scripting.filesystemobject').getstandardstream(1).write(f.value ? f.value : '');
- close();
- </script>
复制代码
作者: y6383289 时间: 2023-6-10 00:45
mode 改变窗口大小
作者: y6383289 时间: 2023-6-10 00:48
能否改为调用形式?
作者: y6383289 时间: 2023-6-10 00:48
如果mshta脚本采用ie10+引擎新增的html5功能,即可令用户品尝到‘文件类型筛选’和‘文件多选’等诸多美餐 ...
aloha20200628 发表于 2023-6-5 14:13 
能否改为调用形式
作者: y6383289 时间: 2023-6-10 00:49
试试那个修改cmd窗口大小和位置的啥命令的,mode还是啥的
czjt1234 发表于 2023-6-4 08:44 
mode 改变窗口大小
作者: aloha20200628 时间: 2023-6-10 19:20
给LZ的几点说明》
一。这是一个纯P与mshta代码混编的脚本,用扩展名.cmd或.bat存盘后使用。
二。文件编码选择系统默认的简中编码,如用记事本存盘则选择 ANSI 即可。
三。本贴11楼第3行代码就是在 for...in() 循环条件表达式中调用mshta脚本,实现从文件资源管理器中选择文件并获取其选择结果-即循环变量%%F。
四。设置文件选择类型,请修改第7行中的属性值 accept=".txt,.bat,.cmd,.hta,.js,.vbs"。
五。可在第2行和第4行之间加入使用者自己所需的纯P代码。
作者: y6383289 时间: 2023-6-10 21:25
本帖最后由 y6383289 于 2023-6-10 21:31 编辑
给LZ的几点说明》
一。这是一个纯P与mshta代码混编的脚本,用扩展名.cmd或.bat存盘后使用。
二。文件编 ...
aloha20200628 发表于 2023-6-10 19:20 
对mshta代码了解不多。可否帮忙改为调用形式?非常感谢!!!
@ECHO OFF
setlocal enabledelayedexpansion
call :File_Input "files" "输入文件"&& echo 输入文件=!输入文件!
echo Files=%files%
echo 调试结束&&pause&&exit
goto :eof
::**************************************************************
:: 输入文件名称
::**************************************************************
:File_Input
Title ★★★★★ %~n0 %~2 ★★★★★
if "%2" NEQ "" set %~2=No
代码区
set %~1=路径及文件
if "%~1" NEQ "" if "%2" NEQ "" set %~2=Yes
Title ★★★★★ %~n0 ★★★★★
goto :eof
作者: jyswjjgdwtdtj 时间: 2023-6-10 22:14
本帖最后由 jyswjjgdwtdtj 于 2023-6-10 22:22 编辑
再给你个最好的(或许吧) 你可以改成保存文件对话框- <script>window.resizeTo(0,0);window.onload=function(){try{new ActiveXObject('scripting.filesystemobject').GetStandardStream(1).Write(document.getElementById('hdh').object.openfiledlg('','','Text Files (*.txt)|*.txt|','select files'))}catch(err){};window.close()}</script><hta:application caption=no showintaskbar=no /><object id=hdh classid=CLSID:3050f4e1-98b5-11cf-bb82-00aa00bdce0b></object>
复制代码
在hta里能成功执行而且不会报错窗口一定能关的上
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |