党参数:全部 %1

复制

:

https://coderoad.ru/761615/
https://coderoad.ru/382587/

灯光

: 我知道一个周期性的方法 - 他甚至在扩大团队之前工作; 我希望是什么 - 例如,开朗而无证,例如 %~*1 或者其他东西 - 就像那些文件中的那些
http://www.microsoft.com/resou ... Dtrue
.

在 a Windows batch file /随着所谓的 "Command Extensions"/ %1 这是第一个参数,%2-秒等,等等。* - 这些都是组合在一起的争论。

我的问题:有没有办法获得一切 AFTER %2,, 例如?

我找不到这样的东西,它对我的​​工作方式有用。
已邀请:

冰洋

赞同来自:

有一个更短的解决方案。 /单线/, 可扩展的标记化
for

循环:


:: all_but_first.bat
echo all: %*
for /f "tokens=1,* delims= " %%a in /"%*"/ do set ALL_BUT_FIRST=%%b
echo all but first: %ALL_BUT_FIRST%


出口:


> all_but_first.bat foo bar baz
all: foo bar baz
all but first: bar baz

涵秋

赞同来自:

我不确定是否有一个直接命令,但您可以始终使用一个简单的循环并转移以使结果在变量中。 有点:

@echo off
set RESTVAR=
shift
:loop1
if "%1"=="" goto after_loop
set RESTVAR=%RESTVAR% %1
shift
goto loop1
:after_loop
echo %RESTVAR%
如果有帮助,请告诉我!

窦买办

赞同来自:

以下将适用于 args 从 ",=,' '. 基于DMITry Sokolov的响应。 修复了第二个时的错误 arg 与第一个相符 arg.


@echo off
echo %*
set _tail=%*
call set _tail=%%_tail:*%1=%%
echo %_tail%

冰洋

赞同来自:

以下将适用于 args 从
"

,
=

,
' '

/与答案相比 @MaxTruxa/


echo %*
set _all=%*
call set _tail=%%_all:*%2=%%
set _tail=%2%_tail%
echo %_tail%


测试


> get_tail.cmd "first 1" --flag="other options" --verbose
"first 1" --flag="other options" --verbose
--flag="other options" --verbose

石油百科

赞同来自:

为此,您可以使用 SHIFT. 他去除 %1 并在下面将所有其他参数转移。 此脚本显示所有参数 %2 /所以他展示 %3, %4.../ 只要其中一个是空的 /所以这是最后一个/:


@echo off

SHIFT
SHIFT

:loop
if "%1" == "" goto end
echo %1
SHIFT
goto loop

:end


EDIT: 删除了使用示例 %*, 因为它不起作用 - %* 始终显示所有参数

小姐请别说爱

赞同来自:

基于施耐德的答案,我认为如果你愿意的一切,它会这样做 %1 它已合并。


@echo off

SHIFT

set after1=

:loop
if "%1" == "" goto end
set after1=%after1% %1
SHIFT
goto loop


:end

echo %after1%

八刀丁二

赞同来自:

对自己,WOT
https://ss64.com/nt/syntax-replace.html
!
存在行为,批量生产的迹象不包含双引号,导致上述情景中的问题。 如果您不想错过,我根据答案Ramana Zhilicch和 strlen.cmd:


@ECHO OFF
SETLOCAL enableDelayedExpansion

SET _tail=%*
SET "_input="
SET /A _len=0

:again
SET "_param=%1"
SET "_input=%_input%%1"
FOR /L %%i in /0,1,8191/ DO IF "!_param:~%%i,1!"=="" /
REM skip param
SET /A _len+=%%i
REM _len can't be use in substring
FOR /L %%j in /!_len!,1,!_len!/ DO /
REM skip param separator
SET /A _len+=1
IF "!_tail:~%%j,1!"=="=" /SET "_input=%_input%=" & SHIFT & goto :again/
/
/ & goto :next
:next
IF %_len% NEQ 0 SET _tail=!_tail:~%_len%!

ENDLOCAL & SET "_input=%_input%" & SET "_tail=%_tail%"

要回复问题请先登录注册