标题: 批处理能否在for语句后面传入参数? [打印本页]
作者: wgf4242 时间: 2012-11-2 15:48 标题: 批处理能否在for语句后面传入参数?
比如某程序工具栏。
命令:for %i in (%*) do echo %i
参数:1 2 3 4 5 6 7 8 9 10
我这样写肯定是不能输出1-10的,能否用什么代替一下,之后传入参数再执行for语句?(我也不想新建一个bat)
作者: wrove 时间: 2012-11-2 16:37
Set /p args=请输入参数:
作者: CrLf 时间: 2012-11-2 17:50
每个字都认得,可是组合在一起咋就看不懂了
作者: wgf4242 时间: 2012-11-2 20:12
回复 3# CrLf
比如这种快捷方式。我要怎么输入将参数一一输出呢?
作者: wc726842270 时间: 2012-11-3 03:22
for /f "delims=" %i in ("1 2 3 4 5 6 7") do echo %i
作者: CrLf 时间: 2012-11-3 04:26
本帖最后由 CrLf 于 2012-11-3 04:27 编辑
for 和 echo 是 cmd 的内部命令,不能像外部程序一样独立执行。
直接运行 cmd 是不支持 %* 的,需通过 cmdcmdline 获取参数。
楼主可在快捷方式的目标项里写:- %comspec% /q/v/k set "cmd=!cmdcmdline:*:*=!"&(for %a in (!cmd:~43!)do echo %a)&rem
复制代码
这样就能列出拖入的文件信息,不过因为没有专门处理特殊字符,所以用 for 循环时可能被 , ; = 等截断
若要进行防截断处理,代码就有点冗长了:- %comspec% /q/v/k set "cmd=!cmdcmdline:*:*=!"&set ^"cmd=!cmd:"=!"&(for %a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z)do set "cmd=!cmd: %a:=" "%a:!")&(for %a in (!cmd:~150!^")do echo %a)&rem
复制代码
作者: wgf4242 时间: 2012-11-4 20:47
%comspec% /q/v/k set "cmd=!cmdcmdline:*:*=!"&(for %a in (!cmd:~43!)do echo %a)&rem
cmd=!cmdcmdline:*:*=! 求解释。。。
(!cmd:~43!) 也求解释。。有帮助说明么。
没看懂- -
作者: CrLf 时间: 2012-11-4 21:24
回复 7# wgf4242
!cmdcmdline:*:*=! 是去掉命令行参数中的 [%comspec% /q/v/k set "cmd=!cmdcmdline:*] 这部分字符,把剩下字符串赋值给 %cmd% 变量,之所以不直接使用变量偏移来去除多余内容是为了兼容 %comspec% 值长度不同的环境
!cmd:~43! 是将剩余命令行参数中的 [:*=!"&(for %a in (!cmd:~43!)do echo %a)&rem] 去掉,这样就只剩下由桌面传递来的文件名参数了
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |