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

[文件操作] 请教如何让创建快捷方式的批处理循环执行?

批处理如下:
  1. @echo off
  2. set "srclnk=D:\a.lnk"
  3. set "arg=abc"
  4. if exist "%srclnk%" mshta VBScript:Execute("Set a=CreateObject(""WScript.Shell""):Set b=a.CreateShortcut(""%srclnk%""):b.Arguments=(""%arg%""):b.Save:close")
复制代码
以上批处理运行一次只能处理一个文件D:\a.lnk,现在还有E:\abc\小明.lnk、F:\财务\王jack.lnk、D:\下载\Mr.白.lnk……G:\一日游\系统system.lnk共20个文件要处理,该怎么写这个循环,请大家想想办法,谢谢!

  1. @echo off
  2. for %%a in (D:\a.lnk E:\abc\小明.lnk F:\财务\王jack.lnk) do (
  3. set "srclnk=%%a"
  4. set "arg=abc"
  5. if exist "%srclnk%" mshta VBScript:Execute("Set a=CreateObject(""WScript.Shell""):Set b=a.CreateShortcut(""%srclnk%""):b.Arguments=(""%arg%""):b.Save:close")
  6. )
复制代码

TOP

回复 2# 522235677


    试了一下没有反应,不知是不是不支持C:\Documents and Settings\这种路径?

TOP

回复 3# lzf_voip


    路径有有空格的加个双引号

TOP

回复 4# 522235677


for循环的in(abc.lnk 小明.lnk Mr李.lnk 张总.lnk 家具.lnk 生活费.lnk 旅游.lnk 报表.lnk 审计.lnk 税务01.lnk 采购wang.lnk)中的元素个数超过10个批处理不能执行,该怎么办呢?

TOP

本帖最后由 pcl_test 于 2015-5-6 23:52 编辑

回复 5# lzf_voip
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims=:" %%a in ('more +7 %0') do (
  3. set "srclnk=%%a"
  4. set "arg=abc"
  5. if not exist "!srclnk!" mshta VBScript:Execute^("Set a=CreateObject^(""WScript.Shell""^):Set b=a.CreateShortcut^(""!srclnk!""^):b.Arguments=^(""!arg!""^):b.Save:close"^)
  6. )
  7. pause
  8. ::abc.lnk
  9. ::小明.lnk
  10. ::Mr李.lnk
  11. ::张总.lnk
  12. ::家具.lnk
  13. ::生活费.lnk
  14. ::旅游.lnk
  15. ::报表.lnk
  16. ::审计.lnk
  17. ::税务01.lnk
  18. ::采购wang.lnk
  19. ::自行添加
复制代码

TOP

回复 6# pcl_test
每个文件比如abc.lnk,其实是一个完整路径(C:\abc.lnk)这样也可以吗?

TOP

回复 7# lzf_voip

可以,如果是完整路径,把第三行的set "srclnk=%%a"改为set "srclnk=%%a:%%b"即可

TOP

回复 6# pcl_test


    几点实在搞不懂
1、 tokens=1* delims=:
2、in ('more +7 %0')
3、::abc.lnk

TOP

本帖最后由 pcl_test 于 2015-5-17 13:18 编辑

回复 9# lzf_voip

假设你已有相关批处理基础,没有的话,先从基础学起
1、 tokens=1* delims=:
2、in ('more +7 %0')
3、::abc.lnk
三句的结合就是用more从批处理文件第七行开始逐行读取::abc.lnk这类快捷方式,tokens=1* delims=:的作用就是去掉::提取abc.lnk

TOP

问题得到解决后请在标题最前面注明[已解决]
http://www.bathome.net/thread-3473-1-1.html

TOP

回复 10# pcl_test

有三个问题:

1、想通过set "d1=F:\" 来用d1表示一个路径,set "n1=123.lnk"来用n1表示一个文件,怎么用路径加文件名来表示,达到::123.lnk这种效果?

2、不想设置变量set "srclnk=%%a:%%b" ,想直接用%%a:%%b,在用到srclnk的地方可以直接写成%%a:%%b吗?

3、既然用到pause,那运行完会停止在哪,不想出现停止,可不可以去掉pause,甚至运行时出现的命令提示符框都不想出现?
   

TOP

回复 12# lzf_voip

1、如果你的路径有n多,且各不相同,那么不就要set d1……set dn,快捷方式名字同理,麻烦
2、set "srclnk=%%a:%%b"只有一句,却可以少不少功夫,想直接用%%a:%%b,把set "srclnk=%%a:%%b"去掉,!srclnk!全部替换成%%a:%%b
3、pause改为exit,隐藏代码自行搜索论坛

TOP

回复 13# pcl_test


    文件名比较多,路径虽说不多,但是很长,而且其中含有空格,所以一遍一遍写很繁琐,看得眼花缭乱,所以有必要先定义,恳请再次给予指点,真的麻烦你了。

TOP

甚至运行时出现的命令提示符框都不想出现

试试:
http://bbs.bathome.net/thread-3271-1-1.html
Talk is cheap. Show me the code.
没事不要瞎扯淡,有能耐就把代码贴出来给我看。

TOP

返回列表