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

[文件操作] [已结帖]探讨一种比较简洁高效的批处理解决方案(求助)

本帖最后由 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代码,感觉按自己的思路将之整合到一块着实不太轻松,也觉得有些庞大了,真诚希望能够得到论坛中众高手热情帮助和指教为盼!

学习了,不过为啥发表回复在快速回复模式会这样啊[attach]5716[/attach]如图,高级模式就不会...,有木有坛友也这样...,
呵,为了截图第一次发出去了???

TOP

学习了,不过为啥发表回复在快速回复模式会这样啊如图

TOP

怎么,群内高手们都视而不见,见死不救啊?!
天道酬勤、地道酬善、人道酬诚、商道酬信、业道酬精。

TOP

群内各位高手,在下的问题还没有完全解决啊,还请大家继续关注本帖啊
天道酬勤、地道酬善、人道酬诚、商道酬信、业道酬精。

TOP

回复 18# wskwfkbdn


   和LZ说的情况均不相似,就算是一种升级吧
天道酬勤、地道酬善、人道酬诚、商道酬信、业道酬精。

TOP

回复 1# angelbd

是绿色软件就写个绿化,想安装,就封装个exe安装包,,干嘛搞那么复杂

TOP

问题又来了,见下面代码:
@cd /d %~dp0
set path=%userprofile%\桌面\Mab\M.exe    ::
set topath="%USERPROFILE%\桌面\M.url"   :: M.url 与M.lnk之区别 是网页和程序的快捷方式吧?
echo [InternetShortcut] >> %topath%
echo URL="%path%" >> %topath%
echo IconIndex=0 >> %topath%
echo IconFile=%path% >> %topath%
上面的应该可以实现创建桌面快捷方式,不过
想在 开始-所有程序中创建用户自己的程序文件夹,并创建指定路径下的程序快捷方式,如何实现?
天道酬勤、地道酬善、人道酬诚、商道酬信、业道酬精。

TOP

回复 10# Batcher


    谢谢管理员指点开迷津与困惑,真有点好事多磨、苦尽甘来之喜悦!
天道酬勤、地道酬善、人道酬诚、商道酬信、业道酬精。

TOP

本帖最后由 angelbd 于 2012-9-25 13:25 编辑

回复 9# terse


     多谢指教!

   原来是这样,多谢11# forfiles!
   @del /a /f  ”%userprofile%\start menu\programs\Mab“  >nul
天道酬勤、地道酬善、人道酬诚、商道酬信、业道酬精。

TOP

回复 11# forfiles


    学习了,多谢指教!
天道酬勤、地道酬善、人道酬诚、商道酬信、业道酬精。

TOP

本帖最后由 angelbd 于 2012-9-25 13:25 编辑

回复 9# terse


    可以如此么?
   @del /a /f  %userprofile%“\start menu\programs\Mab“  >nul    ?!


原来是这样,多谢11# forfiles指点!
   @del /a /f  ”%userprofile%\start menu\programs\Mab“  >nul
天道酬勤、地道酬善、人道酬诚、商道酬信、业道酬精。

TOP

回复 8# forfiles


   你说的或许有道理,不过单独使用时这样并没有错误啊?我现在困惑的是用在for /if 语句中的正确方式。多谢指点。
天道酬勤、地道酬善、人道酬诚、商道酬信、业道酬精。

TOP

路径有空格的时候不要忘了加引号
  1. del /a /f  "%userprofile%\start menu\programs\abc"
复制代码

TOP

回复 4# angelbd


    为了限制广告贴,前几个帖子是需要验证码的,后面就不需要了。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表