标题: [文件管理] 批处理无3方显示“打开文件对话框” [打印本页]
作者: raymai97 时间: 2011-11-15 23:42 标题: 批处理无3方显示“打开文件对话框”
特点:NO临时文件,只一个批处理文件,HTA+BAT集于一身
原理:调用mshta打开自己,并把结果通过注册项反馈给批处理,批处理检测后会删除注册项
不多说,代码上:- @echo off
- goto a
- <html>
- <body>
- <input type='file' id='f' />
- <script type='text/javascript'>
- var f = document.getElementById('f');
- f.click();
- var shell = new ActiveXObject('WScript.Shell');
- shell.RegWrite('HKEY_CURRENT_USER\\Volatile Environment\\msg', f.value);
- window.close();
- </script>
- </body>
- </html>
-
- :a
- set -reg=reg delete "HKCU\Volatile Environment" /v "msg" /f
- echo,任意键选择文件
- echo,
- pause>nul
- %-reg%>nul 2>nul
- mshta "%~dpnx0"
- for /f "tokens=2*" %%i in ('reg query "HKCU\Volatile Environment" /v "msg"') do (
- set fname=%%j
- )
- ::不能if x==x (x) else (y),否则选择有括号的文件时就会KO
- if "%fname%"=="" echo,你没有选择文件
- if not "%fname%"=="" echo,你选择了%fname%。
- %-reg%>nul 2>nul
- echo,
- pause>nul
复制代码
作者: 920168 时间: 2011-11-16 09:09
特来支持!!
作者: garyng 时间: 2011-11-16 09:55
还是一句:RayMai究竟是RayMai啊!
收藏了。。
是HTML+BAT吧?
作者: raymai97 时间: 2011-11-16 11:57
回复 3# garyng
hta来的,改成html就不能写入注册表了
作者: garyng 时间: 2011-11-16 12:09
回复 4# raymai97
哦哦~
我对这东不解啊。。。
作者: defanive 时间: 2011-11-16 13:10
- @echo off
- for /f %%a in ('^(type "%~f0"^&echo;x^)^|find /c /v ""') do set "nLine=%%a"
- setlocal enabledelayedexpansion
- (for /l %%a in (2,1,%nLine%) do set /p Line_%%a=&set "Exec=!Exec!&echo;^!Line_%%a^!")<"%~f0"
- :loop
- >"%~f0" (type nul%Exec%)
- mshta vbscript:execute("set oDlg=CreateObject(""MSComDlg.CommonDialog""):oDlg.MaxFileSize=260:oDlg.Flags=4:oDlg.Action=1:CreateObject(""Scripting.FileSystemObject"").OpenTextFile(""%~f0"",8).Write(""_""&oDlg.FileName):self.close")
- <"%~f0" (for /l %%a in (1,1,%nLine%) do set /p Data=)
- echo File Path: %Data:~1%
- pause
- goto :loop
- ::Data
复制代码
稍微写了一段,批处理自身应该不算临时文件吧,
作者: canyuexiaolang 时间: 2011-11-16 13:10
win2003.....有点慢...该机子事?
作者: defanive 时间: 2011-11-16 13:12
6L的代码基于清除批处理自身最后一行的研究成果,将批处理自己作为临时文件使用
作者: raymai97 时间: 2011-11-16 13:37
回复 8# defanive
defanive你是用xp吧?commondialog我不是没有试过,在win7下不行啊~
作者: raymai97 时间: 2011-11-16 13:38
回复 7# canyuexiaolang
这个会调用到ie的东西,所以会比较慢~
作者: defanive 时间: 2011-11-16 23:19
回复 9# raymai97
Win7…回去改一下换成html控件执行好了
作者: xj7199 时间: 2011-11-17 12:28
支持大大,能不能写一个保存的文件对话框呀。
作者: cjiabing 时间: 2011-11-17 14:07
有创意,不过有个问题必须解决,就是如何把结果传回批处理,而不显示那些多余的东西?
任意键选择文件
错误: 系统找不到指定的注册表项或值
你没有选择文件
作者: cjiabing 时间: 2011-11-17 14:07
有创意,不过有个问题必须解决,就是如何把结果传回批处理,而不显示那些多余的东西?
任意键选择文件
错误: 系统找不到指定的注册表项或值
你没有选择文件
作者: cjiabing 时间: 2011-11-17 16:08
- <html>
- <body>
- <script language="javascript">
- {
- document.execCommand('Open');
- Editor.focus();
- }
- </script>
- </body>
复制代码
没学过JS,搞了蛮久,还是不得。不懂如何document.write输出到文本。
作者: 920168 时间: 2011-11-17 16:52
回复 15# cjiabing - <html>
- <head>
- <title>创建文本文件</title>
- </head>
- <body>
- <hr>
- <script language="JavaScript">
- var fso,f1,pa;
- var pa= "d:\\Fastcopy\\st.txt"
- var ForReading=1;
- fso=new ActiveXObject("Scripting.FileSystemObject");
- f1=fso.CreateTextFile(pa,true);
- f1.WriteLine("Hello World!");
- f1.WriteLine("Hello World1!");
- f1.WriteBlankLines(1);
- f1.Close();
- document.write("创建文本文件: " + pa + "<br>");
- </script>
- </body>
- </html>
复制代码
作者: cjiabing 时间: 2011-11-17 19:42
回复 16# 920168
非常感谢,不过我想问的重点是:如何把document.execCommand('Open')获得的路径输出到其它文档,比如楼主的注册表。
作者: raymai97 时间: 2011-11-17 20:46
回复 13# cjiabing
为何我这里没有这个问题的?而且我记得我已经加了“>nul 2>nul”,难道这样也隐蔽不到错误信息?
作者: cjiabing 时间: 2011-11-17 21:34
回复 18# raymai97
我也不知道怎么会这样,但就是提示找不到注册表。
作者: lxzzr 时间: 2011-11-21 10:21
explorer.exe的命令行参数不是有相似的效果么?
作者: cjiabing 时间: 2011-11-21 13:53
一语惊醒梦中人
作者: LJY4.0 时间: 2022-5-3 20:28
回复 8# defanive
64位不行,那个部件不能创建对象
作者: LJY4.0 时间: 2022-5-3 20:29
回复 19# cjiabing
可能没权限,只是猜测
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |