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

批处理能否在for语句后面传入参数?

比如某程序工具栏。
命令:for %i in (%*) do echo %i
参数:1 2 3 4 5 6 7 8 9 10

我这样写肯定是不能输出1-10的,能否用什么代替一下,之后传入参数再执行for语句?(我也不想新建一个bat)

Set /p args=请输入参数:

TOP

每个字都认得,可是组合在一起咋就看不懂了

TOP

回复 3# CrLf

比如这种快捷方式。我要怎么输入将参数一一输出呢?

TOP

for /f "delims=" %i in ("1 2 3 4 5 6 7") do echo %i
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

本帖最后由 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
复制代码

TOP

%comspec% /q/v/k set "cmd=!cmdcmdline:*:*=!"&(for %a in (!cmd:~43!)do echo %a)&rem

cmd=!cmdcmdline:*:*=! 求解释。。。
(!cmd:~43!) 也求解释。。有帮助说明么。

没看懂- -

TOP

回复 7# wgf4242


    !cmdcmdline:*:*=! 是去掉命令行参数中的 [%comspec% /q/v/k set "cmd=!cmdcmdline:*] 这部分字符,把剩下字符串赋值给 %cmd% 变量,之所以不直接使用变量偏移来去除多余内容是为了兼容 %comspec% 值长度不同的环境
    !cmd:~43! 是将剩余命令行参数中的 [:*=!"&(for %a in (!cmd:~43!)do echo %a)&rem] 去掉,这样就只剩下由桌面传递来的文件名参数了

TOP

返回列表