找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 19530|回复: 7

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

[复制链接]
发表于 2012-11-2 15:48:28 | 显示全部楼层 |阅读模式
比如某程序工具栏。
命令:for %i in (%*) do echo %i
参数:1 2 3 4 5 6 7 8 9 10

我这样写肯定是不能输出1-10的,能否用什么代替一下,之后传入参数再执行for语句?(我也不想新建一个bat)
发表于 2012-11-2 16:37:03 | 显示全部楼层
Set /p args=请输入参数:
发表于 2012-11-2 17:50:00 | 显示全部楼层
每个字都认得,可是组合在一起咋就看不懂了
 楼主| 发表于 2012-11-2 20:12:24 | 显示全部楼层
回复 3# CrLf

比如这种快捷方式。我要怎么输入将参数一一输出呢?
发表于 2012-11-3 03:22:03 | 显示全部楼层
for /f "delims=" %i in ("1 2 3 4 5 6 7") do echo %i
发表于 2012-11-3 04:26:53 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2012-11-4 20:47:06 | 显示全部楼层
%comspec% /q/v/k set "cmd=!cmdcmdline:*:*=!"&(for %a in (!cmd:~43!)do echo %a)&rem

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

没看懂- -
发表于 2012-11-4 21:24:23 | 显示全部楼层
回复 7# wgf4242


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

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 16:34 , Processed in 0.018662 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表