Board logo

标题: [文件操作] 批处理如何调用/弹出文件或文件夹选择对话框 [打印本页]

作者: 懒得勤快    时间: 2015-3-2 15:17     标题: 批处理如何调用/弹出文件或文件夹选择对话框

求助大神,用批处理如何调用资源管理器来选择文件或文件夹并将所选择的文件夹或者文件的路径赋值到批处理中,选择了文件夹或者文件后,能够将与之对应的路径捕捉到批处理代码中给后面的程序使用
作者: pcl_test    时间: 2015-3-2 15:59

回复 1# 懒得勤快

借助第三方工具
作者: pcl_test    时间: 2016-7-12 17:35

文件选择框
  1. <!-- :
  2. @echo off
  3. for /f "delims=" %%a in ('mshta "%~f0"') do echo;%%a
  4. pause&exit /b
  5. -->
  6. <input type=file id=f>
  7. <script>
  8. f.click();new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(f.value);close();
  9. </script>
复制代码

作者: pcl_test    时间: 2016-7-12 17:36

本帖最后由 pcl_test 于 2016-7-12 17:39 编辑

文件夹选择框
  1. <!-- :
  2. @echo off
  3. for /f "delims=" %%a in ('mshta "%~f0"') do echo;%%a
  4. pause&exit /b
  5. -->
  6. <script>
  7. var Shell = new ActiveXObject("Shell.Application");
  8. var Folder = Shell.BrowseForFolder(0, "请选择文件夹", 0); //起始目录为:桌面
  9. if (Folder != null) {
  10.     Folder = Folder.items();
  11.     Folder = Folder.item();
  12.     Folder = Folder.Path;
  13.     new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(Folder);
  14. }
  15. close();
  16. </script>
复制代码

作者: yunyan100    时间: 2017-12-14 17:05

回复 4# pcl_test


    版主好,能一个窗口,打开后可以进行文件夹和指定文件(如exe)选择么?谢谢
作者: pcl_test    时间: 2017-12-15 00:27

本帖最后由 pcl_test 于 2017-12-18 13:21 编辑

回复 5# yunyan100

试试
作者: yunyan100    时间: 2017-12-15 11:12

回复 6# pcl_test


    非常感谢,我试下先我发过一条我自己作的bat的功能码,因为在这学的,现在正在完善和功能改进,所以不好意思又要来请教你了,谢谢
作者: yunyan100    时间: 2017-12-15 11:17

本帖最后由 yunyan100 于 2017-12-15 11:44 编辑

回复 6# pcl_test

有点不对,这个没有显示出来,是这样的,是打开一个窗口,在里面可以显示我指定格式(如*.exe文件),也有文件夹,所以就是想能选择显示的文件和文件夹,目前我用的是选择文件夹,然后批处理里才来选择是否是文件还是文件夹,所以想有个可以一次选择是文件或者文件夹
你上面一个代码是文件夹,一个是文件,所以能否合到一起,且文件那里只显示指定格式的文件(如*.exe文件),第三小工具也成,因为是返回批处理的
作者: pcl_test    时间: 2017-12-16 00:18

回复 8# yunyan100

没懂你要的效果
一个窗口按选择,即可作为文件选择对话框也可作为文件夹选择对话框?
作者: yunyan100    时间: 2017-12-16 13:23

回复 9# pcl_test


不好意思,其实就是调用系统的选择窗口也可是第三方小软件(同时支持选择文件(设置的格式)和文件夹),目前基本是文件和文件分开的,我曾经用过一个软件,在选择它能加工的内容时
一个对话框可以选择指定的文件和文件夹,因为选择文件就一个,如果选择文件夹,后面的操作就是批量将文件夹里的指定文件操作
下面这个是我在网上收集的选择文件的,可以指定,就是想这种的同时也可以选择文件夹,以前有用了一软件的对话框,当我选择文件夹时,下面那个打开就变成了选择,即为同时可以选择文件和文件夹,
  1. @echo off
  2. setlocal
  3. for /f "delims=" %%I in ('powershell -noprofile "iex (${%~f0} | out-string)"') do (
  4.     echo You chose %%~I
  5. )
  6. pause
  7. goto :EOF
  8. : end Batch portion / begin PowerShell hybrid chimera #>
  9. Add-Type -AssemblyName System.Windows.Forms
  10. $f = new-object Windows.Forms.OpenFileDialog
  11. $f.InitialDirectory = pwd
  12. $f.Filter = "Exe文件 (*.exe)|*.exe"
  13. $f.ShowHelp = $true
  14. $f.Multiselect = $true
  15. [void]$f.ShowDialog()
  16. if ($f.Multiselect) { $f.FileNames } else { $f.FileName }
复制代码

作者: pcl_test    时间: 2017-12-16 22:37

回复 10# yunyan100

已做了兼容处理
作者: yunyan100    时间: 2017-12-17 14:03

回复 11# pcl_test

    首先感谢 你的回复,还是有错,
win10x64错误
xp错误
我在win7里测试,可以选择指定的文件,如exe,文件夹(只支持指定目录下这级,不支持向下, 不过这个不算大问题了)也可以了,谢谢,我用win10了,可否支持?
我测试过用管理员权限,win10还是这个错误提示,
作者: yunyan100    时间: 2017-12-18 13:45

回复 11# pcl_test


    首先感谢你的帮助,win10的错误还是和之前一样,用了兼容模式也是提示那样,xp我装了net2.0可以了
作者: pcl_test    时间: 2017-12-18 14:18

回复 13# yunyan100

expl.exe.config里删除<supportedRuntime version="v2.0.50727"/>
作者: ivor    时间: 2017-12-18 14:40

本帖最后由 ivor 于 2017-12-18 14:43 编辑

代码转载于网络
批处理取返回值:
  1. @echo off
  2. set pscmdline='powershell.exe -file E:\python\ps.ps1'
  3. rem 取返回值%%a
  4. for /f %%a in (%pscmdline%) do (echo %%a)
复制代码
powershell
  1. function Select-FolderDialog
  2. {
  3. param([string]$Directory,[string]$Description,[boolean]$ShowNewFolderButton)
  4. [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
  5. $objForm = New-Object System.Windows.Forms.FolderBrowserDialog
  6. $objForm.RootFolder = $Directory
  7. $objForm.Description = $Description
  8. $objForm.ShowNewFolderButton = $ShowNewFolderButton
  9. $Show = $objForm.ShowDialog()
  10. If ($Show -eq "OK")
  11. {
  12. #确定按钮代码块
  13. Return $objForm.SelectedPath
  14. }
  15. Else
  16. {
  17. #需要输出错误信息的话可以取消下一行的注释
  18. #取消按钮代码块
  19. #Write-Error "error information here"
  20. }
  21. }
  22. $folder_path = Select-FolderDialog -Directory "Desktop" -Description "提示语句" -ShowNewFolderButton $true
  23. #$folder_path 为选择路径
  24. return $folder_path
复制代码

作者: yunyan100    时间: 2017-12-18 14:48

本帖最后由 yunyan100 于 2017-12-18 14:51 编辑

回复 14# pcl_test


    非常感谢,按你的删除可以了,奇怪,我win10装了it天空的net3.5的4.0-4.7,我如果把expl.exe.config删除,就会还是出现之前的错误
我测试了vm机里的win10,删除expl.exe.config也可以用,唯一区别,实系统是win10企业g版,虚拟win10就是180天激活企业版?非常感谢你,能用了,谢谢
xp里,装了net2.0,<supportedRuntime version="v2.0.50727"/>这句得保留,win7里也要这句,我刚试过,没这句,不能用,谢谢
作者: pcl_test    时间: 2017-12-18 14:57

回复 16# yunyan100

xp和win7不需要config文件,win8/win10才需要,如果要统一使用config文件,   将2.0和4.0那两行调换一下顺序
作者: yunyan100    时间: 2017-12-18 15:11

回复 17# pcl_test


    原来如此,我刚试了,在win7和xp,删除expl.exe.config确实可以了,vm里的win10也是可以,实机装了net的也不行,不过这个没影响了,谢谢
作者: yunyan100    时间: 2017-12-18 15:19

本帖最后由 yunyan100 于 2017-12-18 15:22 编辑

回复 15# ivor


    谢谢,下面是批处理错误提示,版主的已经ok了,

无法加载文件
D=135170
+
+
请按任意键继续. . .
作者: yunyan100    时间: 2018-8-26 09:22

回复  yunyan100


已做了兼容处理
pcl_test 发表于 2017-12-16 22:37


hi,又有个帮忙要你了,之前帮我做了软件,需要稍微麻烦改下哈,现在是右边选择,想改成左右可选择,还有就是之前扩展名在有必须指定*.exe,*.txt等,增加了成*.*,,麻烦了
作者: 小张    时间: 2021-8-14 09:52

请问一下,用前面的那个文件选择对话框选择文件以后,怎么在后面使用这个文件?
作者: 肥胖龟    时间: 2022-9-10 07:56

我尝试使用了3楼的代码
  1. [code]<!-- :
  2. @echo off
  3. for /f "delims=" %%a in ('mshta "%~f0"') do echo;%%a
  4. pause&exit /b
  5. -->
  6. <input type=file id=f>
  7. <script>
  8. f.click();new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(f.value);close();
  9. </script>
复制代码
[/code]

请问选择的文件地址将被存储在哪个变量中?
作者: tmpuser    时间: 2022-9-10 17:17

回复 22# 肥胖龟


    for /f "delims=" %%a in ('mshta "%~f0"') do set xxx=%%a
改成这样就行了




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2