|
|
本帖最后由 angelbd 于 2014-11-20 19:47 编辑
有这样一种需求,我想在同一个批处理中实现两个功能,一是在全部磁盘中查找有无某一特定文件,假设为a.exe,其路径一般是固定的,其安装程序默认的安装路径嘛,比如是 x:\abc\abc1000\,其中x为盘符未定,客户可能选择安装到当前几个磁盘分区中的任何一个,我个人认为磁盘分区一般不可能超过8个(含光驱盘符),即c-j(c、d、e、f、g、h、i、j),如果查到在某磁盘分区下有该a.exe,则从当前目录中向该目录是复制几个exe文件,另一个是要对复制到上一步中的其个文件比如b.exe创建到桌面快捷方式比如叫b.url(至少保证这个)和在当前系统登录用户或者干脆对all users的开始-所有程序-软件目录文件夹-程序快捷方式b.url.
由于自己对批处理熟悉和掌握远远不够,对使用 for 和 if 组合非常头痛,只好使用个人的笨办法,那就是不厌其烦地使用语句罗列,我对第一项的解决思路是使用 if exist "x:\abc\abc1000\a.exe" @copy
*.exe "x:\abc\abc1000\" , X取值从C到H,自己只好写上8条该语句,在这种情况下自己还有不解之处,我想本语句实现复制、删除和跳转三功能,所以用 if exist "x:\abc\abc1000\a.exe" @copy
*.exe x:\abc\abc1000\ /y >nul && @del /f /s /q x:\abc\abc1000\bb.exe >nul && goto :ext, 不过这样写好像和我预想的结果完全不同,自己也不能找出错误所在。 对第二个自己则是从网上找一段语句,按照自己实际内容和条件适当修改和调整后,自己试验后也未能达到目的,挺郁闷的,特放到论坛中请前辈高手施予援手,热心指点一下在下为盼,这里先谢谢了,由于自己在论坛上属初来乍到,没有PB币或积分相赠,只好来日用自己的努力和付出为论坛做出贡献了。
附:自己曾经尝试多次未果的语句附上。
1、实现第一个要求:查找目录文件所在磁盘目录并复制,
setlocal enabledelayedexpansion
::打开变量延迟,因为下面在for循环内有自定义变量
for %%i in (c d e f g h) do (
::设置循环遍历所有磁盘
cd /d %%i:\
::逐个进入到每个磁盘
for /f "delims=" %%a in ('dir /a-d/b/s a.exe') do (
::用dir命令列出所有的a.exe文件,并将结果用for循环/f处理
echo %%a
::显示出查到的文件地址----这时不想输出显示
set lug=%%~dpa
::将找到的文件所在的路径赋值到变量lug,后面你可以用他了。
echo y|copy "*.exe" "!lug!" &&goto :ext))
::复制a.exe 到查到文件所在目录,加echo y是为了覆盖目标
个人觉得这段语句效率不太高,实际情况是没必要扫描全部目录,如上所述,目录是相对特定的,区别只是磁盘盘符不同罢了。再有自己想实现静默安装,不想输出任何屏幕显示。在语句前简单加@ 及在语句后定向输出 >nul ,似乎都有问题或报错。
2、为实现第二个目的,创建桌面快捷方式,没考虑做开始-程序上程序快捷方式,未替换成自己的实际路径与文件
@chrome.exe
@cd /d %~dp0
set path=%userprofile%\桌面\ChromePlus\chrome.exe
set topath="%USERPROFILE%\桌面\chrome.url"
echo [InternetShortcut] >> %topath%
echo URL="%path%" >> %topath%
echo IconIndex=0 >> %topath%
echo IconFile=%path% >> %topath%
这段没搞清,必须先执行欲创建快捷方式的该程序才能取得相对路径?如何实现创建开始-程序上的程序快捷方式,自己也找到一段VBS代码,感觉按自己的思路将之整合到一块着实不太轻松,也觉得有些庞大了,真诚希望能够得到论坛中众高手热情帮助和指教为盼! |
|