找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 62914|回复: 22

[文件管理] 批处理无3方显示“打开文件对话框”

[复制链接]
发表于 2011-11-15 23:42:20 | 显示全部楼层 |阅读模式
特点:NO临时文件,只一个批处理文件,HTA+BAT集于一身
原理:调用mshta打开自己,并把结果通过注册项反馈给批处理,批处理检测后会删除注册项

不多说,代码上:
  1. @echo off
  2. goto a
  3. <html>
  4. <body>
  5. <input type='file' id='f' />
  6. <script type='text/javascript'>
  7. var f = document.getElementById('f');
  8. f.click();
  9. var shell = new ActiveXObject('WScript.Shell');
  10. shell.RegWrite('HKEY_CURRENT_USER\\Volatile Environment\\msg', f.value);
  11. window.close();
  12. </script>
  13. </body>
  14. </html>

  15. :a
  16. set -reg=reg delete "HKCU\Volatile Environment" /v "msg" /f
  17. echo,任意键选择文件
  18. echo,
  19. pause>nul
  20. %-reg%>nul 2>nul
  21. mshta "%~dpnx0"
  22. for /f "tokens=2*" %%i in ('reg query "HKCU\Volatile Environment" /v "msg"') do (
  23. set fname=%%j
  24. )
  25. ::不能if x==x (x) else (y),否则选择有括号的文件时就会KO
  26. if "%fname%"=="" echo,你没有选择文件
  27. if not "%fname%"=="" echo,你选择了%fname%。
  28. %-reg%>nul 2>nul
  29. echo,
  30. pause>nul
复制代码

评分

参与人数 4PB +10 技术 +4 收起 理由
cmd1152 + 1 不错不错
Hello123World + 1 调用mshta打开自己
netbenton + 10 + 1 哈哈~~有意思~~
CrLf + 1 不错,好办法

查看全部评分

发表于 2011-11-16 09:09:10 | 显示全部楼层
特来支持!!
发表于 2011-11-16 09:55:03 | 显示全部楼层
还是一句:RayMai究竟是RayMai啊!

收藏了。。

是HTML+BAT吧?
 楼主| 发表于 2011-11-16 11:57:17 | 显示全部楼层
回复 3# garyng


    hta来的,改成html就不能写入注册表了
发表于 2011-11-16 12:09:50 | 显示全部楼层
回复 4# raymai97


    哦哦~
我对这东不解啊。。。
发表于 2011-11-16 13:10:17 | 显示全部楼层
  1. @echo off
  2. for /f %%a in ('^(type "%~f0"^&echo;x^)^|find /c /v ""') do set "nLine=%%a"
  3. setlocal enabledelayedexpansion
  4. (for /l %%a in (2,1,%nLine%) do set /p Line_%%a=&set "Exec=!Exec!&echo;^!Line_%%a^!")<"%~f0"
  5. :loop
  6. >"%~f0" (type nul%Exec%)
  7. 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")
  8. <"%~f0" (for /l %%a in (1,1,%nLine%) do set /p Data=)
  9. echo File Path: %Data:~1%
  10. pause
  11. goto :loop
  12. ::Data
复制代码
稍微写了一段,批处理自身应该不算临时文件吧,

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 效率的确更高些

查看全部评分

发表于 2011-11-16 13:10:26 | 显示全部楼层
win2003.....有点慢...该机子事?
发表于 2011-11-16 13:12:02 | 显示全部楼层
6L的代码基于清除批处理自身最后一行的研究成果,将批处理自己作为临时文件使用
 楼主| 发表于 2011-11-16 13:37:33 | 显示全部楼层
回复 8# defanive


    defanive你是用xp吧?commondialog我不是没有试过,在win7下不行啊~
 楼主| 发表于 2011-11-16 13:38:35 | 显示全部楼层
回复 7# canyuexiaolang


    这个会调用到ie的东西,所以会比较慢~
发表于 2011-11-16 23:19:56 | 显示全部楼层
回复 9# raymai97
Win7…回去改一下换成html控件执行好了
发表于 2011-11-17 12:28:43 | 显示全部楼层
支持大大,能不能写一个保存的文件对话框呀。
发表于 2011-11-17 14:07:42 | 显示全部楼层
有创意,不过有个问题必须解决,就是如何把结果传回批处理,而不显示那些多余的东西?
任意键选择文件


错误: 系统找不到指定的注册表项或值
你没有选择文件
发表于 2011-11-17 14:07:49 | 显示全部楼层
有创意,不过有个问题必须解决,就是如何把结果传回批处理,而不显示那些多余的东西?
任意键选择文件


错误: 系统找不到指定的注册表项或值
你没有选择文件
发表于 2011-11-17 16:08:11 | 显示全部楼层
  1. <html>
  2. <body>
  3. <script language="javascript">
  4. {
  5. document.execCommand('Open');
  6. Editor.focus();
  7. }
  8. </script>
  9. </body>
复制代码

没学过JS,搞了蛮久,还是不得。不懂如何document.write输出到文本。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 23:03 , Processed in 0.022505 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表