Board logo

标题: 批处理能否在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 获取参数。

楼主可在快捷方式的目标项里写:
  1. %comspec% /q/v/k set "cmd=!cmdcmdline:*:*=!"&(for %a in (!cmd:~43!)do echo %a)&rem
复制代码
这样就能列出拖入的文件信息,不过因为没有专门处理特殊字符,所以用 for 循环时可能被 , ; = 等截断
若要进行防截断处理,代码就有点冗长了:
  1. %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