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

[已解决]批处理的参数,第n个参数之后的所有参数,如何获取?

[复制链接]
发表于 2012-5-8 19:20:30 | 显示全部楼层 |阅读模式
本帖最后由 noe 于 2012-5-9 15:48 编辑

如题,比如example.bat 1 2 3 4 5 6 7,现在希望得到%3之后的所有参数,即4 5 6 7,并赋值给一个变量。
有些类似于for中的tokens 3*的意思。
想过这样:for /f "tokens=3*" %%a in ("%*") do (set args=%%b),但不理想,%1到%3中包含空格时就不能得到预想的结果。
(参数总数可能很多)

向各位求助,谢谢。

=============
已解决,感谢3楼neorobin的帮助。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2012-5-8 20:02:33 | 显示全部楼层
本帖最后由 canyuexiaolang 于 2012-5-8 20:03 编辑

for /l %%i in (1 1 9) do call echo %%%%i
发表于 2012-5-8 22:07:37 | 显示全部楼层
回复 1# noe
  1. @echo off & setlocal enabledelayedexpansion
  2. set /p "n=要跳过多少个参数: "
  3. for %%a in (%*) do (
  4.         set /a c+=1
  5.         if !c! gtr !n! set "args=!args! %%~a"
  6. )
  7. set args
复制代码

评分

参与人数 1技术 +1 收起 理由
noe + 1 感谢您的帮助

查看全部评分

发表于 2012-5-8 22:14:06 | 显示全部楼层
能否说说什么时候%1到%3中包含空格?
 楼主| 发表于 2012-5-9 15:42:08 | 显示全部楼层
回复 2# canyuexiaolang
谢谢回复,或许是我表达不够明确,我的意图似乎完全没有传达到您那里。并且我说参数总数可能很多 = 不止9个。

回复 4# gawk
谢谢关注。比如文件路径,可能有数量无法预计的空格。




回复 3# neorobin
非常感谢。测试有效。
发表于 2012-5-9 18:06:20 | 显示全部楼层
本帖最后由 Taurus 于 2012-5-9 18:10 编辑
能否说说什么时候%1到%3中包含空格?
gawk 发表于 2012-5-8 22:14

假設strings是有空格的path而且用引號:

  1. @echo off & setlocal enabledelayedexpansion
  2. set /p n=要跳过多少个参数:
  3. set str=str^=
  4. call :a "1" 2 3 "C:\a\b   c\hello" 6 7 ""D:\Mother fuck\wet pussy"" a b c e f g h i j
  5. :a
  6. shift
  7. set/a x+=1&set ENV=%1
  8. if !x! GEQ !n! set "str=!str! %0"
  9. if not defined ENV  (goto :ent) else (goto :a)
  10. :ent
  11. set/p=!str!

复制代码
发表于 2024-9-7 09:46:55 | 显示全部楼层
本帖最后由 tiandyoin 于 2024-9-7 09:49 编辑

  1. @echo off
  2.         set /p n=要跳过多少个参数:
  3.         echo 初始="1" 2 3 "C:\% a % \%%b%%   !c!\h!!e!!llo" 6 7 ""D:\Mother **\wet pussy"" a b c e f g h i j
  4.         call :get_tails list %n% "1" 2 3 "C:\% a % \%%b%%   !c!\h!!e!!llo" 6 7 ""D:\Mother **\wet pussy"" a b c e f g h i j
  5.         set list
  6. @goto :EOF

  7. :get_tails
  8.   @echo off
  9.   set %~1=
  10.   set "count=%~2"
  11.   :LOOP
  12.   set/a count-=1
  13.   set t=%3
  14.   if not defined t goto :LOOP_OUT
  15.   if %count% LSS 0 call set %~1=%%%~1%% %3
  16.   shift /3
  17.   goto :LOOP
  18.   :LOOP_OUT
  19.   set %~1
  20.   call echo list2=%%%~1%%
  21. @goto :EOF
复制代码
使用 call set 的缺点是无法阻止 %% 求值

使用延迟变量的缺点是
无法阻止 !! 求值,
要全局忍受感叹号恐惧的支配,
即使使用 Endlocal & set ... 拿出来,还是摆脱不了 %% 变量求值的坑
发表于 2024-9-7 15:17:00 | 显示全部楼层

  1. @echo off
  2.         set /p n=要跳过多少个参数:
  3.         echo 初始="1" 2 3 "C:\% a % \%%b%%   !c!\h!!e!!llo" 6 7 ""D:\Mother **\wet pussy"" a b c e f g h i j
  4.         call :get_tails list %n% "1" 2 3 "C:\% a % \%%b%%   !c!\h!!e!!llo" 6 7 ""D:\Mother **\wet pussy"" a b c e f g h i j
  5.         set list
  6. @goto :EOF

  7. :get_tails
  8.   @echo off
  9.   set %~1=
  10.   set "cc=%~2"
  11.   set /a cc+=2
  12.   for %%b in (%*) do (
  13.         set /a cc-=1
  14.         set d=&for /f "delims=0123456789c=" %%A in ('set cc') do set d=%%A
  15.         if defined d call set %~1=%%%~1%% %%b
  16.   )
  17. @goto :EOF
复制代码
再来一个for 的形式,全程靠 SET
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 19:41 , Processed in 0.012313 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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