标题: [已解决]批处理的参数,第n个参数之后的所有参数,如何获取? [打印本页]
作者: noe 时间: 2012-5-8 19:20 标题: [已解决]批处理的参数,第n个参数之后的所有参数,如何获取?
本帖最后由 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的帮助。
作者: canyuexiaolang 时间: 2012-5-8 20:02
本帖最后由 canyuexiaolang 于 2012-5-8 20:03 编辑
for /l %%i in (1 1 9) do call echo %%%%i
作者: neorobin 时间: 2012-5-8 22:07
回复 1# noe - @echo off & setlocal enabledelayedexpansion
- set /p "n=要跳过多少个参数: "
- for %%a in (%*) do (
- set /a c+=1
- if !c! gtr !n! set "args=!args! %%~a"
- )
- set args
复制代码
作者: gawk 时间: 2012-5-8 22:14
能否说说什么时候%1到%3中包含空格?
作者: noe 时间: 2012-5-9 15:42
回复 2# canyuexiaolang
谢谢回复,或许是我表达不够明确,我的意图似乎完全没有传达到您那里。并且我说参数总数可能很多 = 不止9个。
回复 4# gawk
谢谢关注。比如文件路径,可能有数量无法预计的空格。
回复 3# neorobin
非常感谢。测试有效。
作者: Taurus 时间: 2012-5-9 18:06
本帖最后由 Taurus 于 2012-5-9 18:10 编辑
能否说说什么时候%1到%3中包含空格?
gawk 发表于 2012-5-8 22:14
假設strings是有空格的path而且用引號:- @echo off & setlocal enabledelayedexpansion
- set /p n=要跳过多少个参数:
- set str=str^=
- 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
- :a
- shift
- set/a x+=1&set ENV=%1
- if !x! GEQ !n! set "str=!str! %0"
- if not defined ENV (goto :ent) else (goto :a)
- :ent
- set/p=!str!
复制代码
作者: tiandyoin 时间: 2024-9-7 09:46
本帖最后由 tiandyoin 于 2024-9-7 09:49 编辑
- @echo off
- set /p n=要跳过多少个参数:
- 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
- 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
- set list
- @goto :EOF
-
- :get_tails
- @echo off
- set %~1=
- set "count=%~2"
- :LOOP
- set/a count-=1
- set t=%3
- if not defined t goto :LOOP_OUT
- if %count% LSS 0 call set %~1=%%%~1%% %3
- shift /3
- goto :LOOP
- :LOOP_OUT
- set %~1
- call echo list2=%%%~1%%
- @goto :EOF
复制代码
使用 call set 的缺点是无法阻止 %% 求值
使用延迟变量的缺点是
无法阻止 !! 求值,
要全局忍受感叹号恐惧的支配,
即使使用 Endlocal & set ... 拿出来,还是摆脱不了 %% 变量求值的坑
作者: tiandyoin 时间: 2024-9-7 15:17
- @echo off
- set /p n=要跳过多少个参数:
- 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
- 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
- set list
- @goto :EOF
-
- :get_tails
- @echo off
- set %~1=
- set "cc=%~2"
- set /a cc+=2
- for %%b in (%*) do (
- set /a cc-=1
- set d=&for /f "delims=0123456789c=" %%A in ('set cc') do set d=%%A
- if defined d call set %~1=%%%~1%% %%b
- )
- @goto :EOF
复制代码
再来一个for 的形式,全程靠 SET
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |