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

[文件操作] [已解决]存在多个U盘(移动磁盘)时如何查找(搜索)并运行里面指定的程序?

本帖最后由 vszy 于 2016-3-20 17:07 编辑

脚本目的:电脑上有两个物理U盘,先获取这些U盘的路径(即盘符),然后再获取的盘符里查找指定程序并运行(如果没有就退出脚本,如果两个U盘里有同样的EXE文件,执行最后盘符那个)
首先关于定位U盘搜索了论坛,发现下面的帖子:
http://www.bathome.net/viewthrea ... p;highlight=U%C5%CC
里面的方案一和二只能获取到我的最后一个U盘(L:),方案三却只能获得前面那个(G:),不知道是哪里出了问题。
于是又找了度娘,得到以下命令可以获得两个盘符:
  1. @echo off&title 查看可移动盘个数及盘符
  2. for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do fsutil fsinfo drivetype %%i:| find "可移动"
  3. pause
复制代码
接下来开始研究在获取的U盘路径里搜索并运行,查到以下命令:
  1. for %%a in (C D E F G H I J K L M O P Q R S T U V W X Y Z) do (
  2. if exist %%~a:\ for /f "delims=" %%b in ('dir /a-d/s/b "%%~a:\QQ.exe"') do start "" "%%~b"
  3. )
复制代码
但这个是全盘搜索,很费时间。不知道怎么改成只搜索获取到的那两个U盘,还有就是如果存在同名文件怎么指定运行最后盘符那个?

个人能力实在有限了,望有经验的朋友帮助一下,谢谢!

刚刚又有个想法,已知条件:在U盘下有个test.ini文件(U盘盘符和test.ini所在目录不确定),test.ini内容如下:
  1. [Common]
  2. NAME1=1.EXE
  3. NAME2=2.EXE
  4. NAME3=3.EXE
复制代码
这里的NAME1,NAME2,NAME3也是已知的。

能不能写个BAT,要求先找到这个INI文件的路径并读取NAME1或2或3的值。最后运行“INI路径\1或2或3.EXE”
例如:比如INI在G:\soft下,读取NAME2段,最终结果是start G:\soft\2.exe

回复 3# flyinnet9


    先谢谢这位兄弟了,但实测无效,而且死机了。

TOP

请版主封贴吧,想换个思路解决问题。谢谢

TOP

全盘搜索INI并读取其里面的值后执行一定的操作。

本帖最后由 vszy 于 2016-3-16 19:51 编辑

已知条件:有个test.ini文件(test.ini所在目录不确定,需全盘搜索),test.ini内容如下:
  1. [Common]
  2. NAME1=1.EXE
  3. NAME2=2.EXE
  4. NAME3=3.EXE
复制代码
这里的NAME1,NAME2,NAME3也是已知的。

能不能写个BAT,要求先找到这个INI文件的路径并读取NAME1或2或3的值。最后运行“INI路径\1或2或3.EXE”
例如:比如test.ini在G:\soft下,读取NAME2段,最终结果是start G:\soft\2.exe

昨晚找了一些资料,也整合了以下代码:
  1. @echo off
  2. rem 指定待搜索的文件
  3. set "FileName=test.ini"
  4. echo 正在搜索,请稍候...
  5. for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  6.     if exist %%a:\ (
  7.         pushd %%a:\
  8.         for /r %%b in (*%FileName%) do (
  9.             if /i "%%~nxb" equ "%FileName%" (
  10.                 echo,%%b
  11.             )
  12.         )
  13.         popd
  14.     )
  15. )
  16. pause
复制代码
  1. @Echo OffFor /f "tokens=1-2 delims==" %%i in (test.ini) do (If /i "%%i"=="NAME1" Echo.%%j)Pause
复制代码
echo却得到G:\soft\test.ini2.exe这样的结果  而不是G:\soft\2.exe   ,今天又改了下还是无果,特来请教各位朋友。
1

评分人数

TOP

回复 7# /zhqsystem/zhq

不知道你这个是不是完整代码,运行就是这个结果。

TOP

  1. @echo off
  2. rem 指定待搜索的文件
  3. set "FileName=vszy.ini"
  4. echo 正在搜索,请稍候...
  5. for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  6.     if exist %%a:\ (
  7.         pushd %%a:\
  8.         for /r %%b in (*%FileName%) do (
  9.             if /i "%%~nxb" equ "%FileName%" (
  10. For /f "tokens=1-2 delims==" %%i in (%%b) do (If /i "%%i"=="NAME" Echo.%%b%%j)
  11.              )
  12.          )
  13.      )
  14. )
  15. pause
复制代码
这是自己研究的半成品,结果如下:

怎么才能去掉红框里的部分啊?
还有就是如果找不到INI文件就往下执行别的或退出该怎么加入?

TOP

本帖最后由 vszy 于 2016-3-17 14:16 编辑

回复 10# CrLf

先谢谢老大了,想再问问如果INI文件内容如下:
  1. [Common]
  2. ITEM1=QQ.EXE
  3. ITEM2=RAR.EXE
  4. ITEM3=PS.EXE
  5. ..............
复制代码
让批处理检测到INI并获取后先运行QQ.EXE等待完成,再运行RAR.EXE.......,如果没检测到INI就执行别的或退出
这样要怎么写?

TOP

本帖最后由 vszy 于 2016-3-17 14:29 编辑

回复 13# flyinnet9

谢谢朋友了,的确加了两个冒号问题解决了。还想追问下(不好意思了)
如果INI文件内容如下:
  1. [Common]
  2. ITEM1=QQ.EXE
  3. ITEM2=RAR.EXE
  4. ITEM3=PS.EXE
  5. ..............
复制代码
让批处理检测到INI并获取后先运行QQ.EXE等待完成,再运行RAR.EXE.......
这样要怎么改写?

TOP

回复 16# flyinnet9


   是匹配多个ITEM,然后依次等待运行。先运行QQ.exe等待完成在运行RAR.EXE等待完成...........

TOP

回复 18# flyinnet9


    我的意思是
if "%%c"=="ITEM1" start/wait "" "%%~dpb%%d"

这一行命令不能实现ITEM1自动递增吗?因为INI里有几个ITEM是不确定的啊。就是以后只改INI文件,而不需要改动BAT就可实现变化。
再次感谢了!

TOP

返回列表