有这样一种需求,我想在同一个批处理中实现两个功能,一是在全部磁盘中查找有无某一特定文件,假设为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是为了覆盖目标