标题: [文件操作] 请教如何让创建快捷方式的批处理循环执行? [打印本页]
作者: lzf_voip 时间: 2015-5-3 15:29 标题: 请教如何让创建快捷方式的批处理循环执行?
批处理如下:- @echo off
- set "srclnk=D:\a.lnk"
- set "arg=abc"
- 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个文件要处理,该怎么写这个循环,请大家想想办法,谢谢!
作者: 522235677 时间: 2015-5-3 16:01
- @echo off
- for %%a in (D:\a.lnk E:\abc\小明.lnk F:\财务\王jack.lnk) do (
- set "srclnk=%%a"
- set "arg=abc"
- if exist "%srclnk%" mshta VBScript:Execute("Set a=CreateObject(""WScript.Shell""):Set b=a.CreateShortcut(""%srclnk%""):b.Arguments=(""%arg%""):b.Save:close")
- )
复制代码
作者: lzf_voip 时间: 2015-5-3 16:11
回复 2# 522235677
试了一下没有反应,不知是不是不支持C:\Documents and Settings\这种路径?
作者: 522235677 时间: 2015-5-3 16:52
回复 3# lzf_voip
路径有有空格的加个双引号
作者: lzf_voip 时间: 2015-5-6 23:18
回复 4# 522235677
for循环的in(abc.lnk 小明.lnk Mr李.lnk 张总.lnk 家具.lnk 生活费.lnk 旅游.lnk 报表.lnk 审计.lnk 税务01.lnk 采购wang.lnk)中的元素个数超过10个批处理不能执行,该怎么办呢?
作者: pcl_test 时间: 2015-5-6 23:31
本帖最后由 pcl_test 于 2015-5-6 23:52 编辑
回复 5# lzf_voip - @echo off & setlocal enabledelayedexpansion
- for /f "tokens=1* delims=:" %%a in ('more +7 %0') do (
- set "srclnk=%%a"
- set "arg=abc"
- if not exist "!srclnk!" mshta VBScript:Execute^("Set a=CreateObject^(""WScript.Shell""^):Set b=a.CreateShortcut^(""!srclnk!""^):b.Arguments=^(""!arg!""^):b.Save:close"^)
- )
- pause
- ::abc.lnk
- ::小明.lnk
- ::Mr李.lnk
- ::张总.lnk
- ::家具.lnk
- ::生活费.lnk
- ::旅游.lnk
- ::报表.lnk
- ::审计.lnk
- ::税务01.lnk
- ::采购wang.lnk
- ::自行添加
复制代码
作者: lzf_voip 时间: 2015-5-7 22:33
回复 6# pcl_test
每个文件比如abc.lnk,其实是一个完整路径(C:\abc.lnk)这样也可以吗?
作者: pcl_test 时间: 2015-5-7 22:57
回复 7# lzf_voip
可以,如果是完整路径,把第三行的set "srclnk=%%a"改为set "srclnk=%%a:%%b"即可
作者: lzf_voip 时间: 2015-5-17 13:09
回复 6# pcl_test
几点实在搞不懂
1、 tokens=1* delims=:
2、in ('more +7 %0')
3、::abc.lnk
作者: pcl_test 时间: 2015-5-17 13:16
本帖最后由 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
作者: pcl_test 时间: 2015-5-17 13:23
问题得到解决后请在标题最前面注明[已解决]
http://www.bathome.net/thread-3473-1-1.html
作者: lzf_voip 时间: 2015-5-17 16:37
回复 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,甚至运行时出现的命令提示符框都不想出现?
作者: pcl_test 时间: 2015-5-17 19:43
回复 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,隐藏代码自行搜索论坛
作者: lzf_voip 时间: 2015-5-17 22:15
回复 13# pcl_test
文件名比较多,路径虽说不多,但是很长,而且其中含有空格,所以一遍一遍写很繁琐,看得眼花缭乱,所以有必要先定义,恳请再次给予指点,真的麻烦你了。
作者: gawk 时间: 2015-5-17 22:33
试试:
http://bbs.bathome.net/thread-3271-1-1.html
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |