获取windows批处理文件中的最后一个命令行参数

获取windows批处理文件中的最后一个命令行参数,windows,batch-file,Windows,Batch File,我需要获取传递给windows批处理脚本的最后一个参数,如何才能做到这一点?这将获取参数的计数: set count=0 for %%a in (%*) do set /a count+=1 要获得实际的最后一个参数,可以执行以下操作 for %%a in (%*) do set last=%%a 请注意,如果命令行有不平衡的引号,这将失败-命令行由重新解析为,而不是直接使用用于%1等的解析。最简单、也许也是最可靠的方法是只使用cmd自己的参数解析和shift直到没有更多在那里 由于这会破坏

我需要获取传递给windows批处理脚本的最后一个参数,如何才能做到这一点?

这将获取参数的计数:

set count=0
for %%a in (%*) do set /a count+=1
要获得实际的最后一个参数,可以执行以下操作

for %%a in (%*) do set last=%%a

请注意,如果命令行有不平衡的引号,这将失败-命令行由
重新解析为
,而不是直接使用用于
%1
等的解析。

最简单、也许也是最可靠的方法是只使用
cmd
自己的参数解析和
shift
直到没有更多在那里

由于这会破坏
%1
等的使用。您可以在子例程中执行此操作:

@echo off
call :lastarg %*
echo Last argument: %LAST_ARG%
goto :eof

:lastarg
  set "LAST_ARG=%~1"
  shift
  if not "%~1"=="" goto lastarg
goto :eof

看你为什么回答这个论点?那不是被问到的。
set first=""
set last=""
for %%a in (%*) do (
SETLOCAL ENABLEDELAYEDEXPANSION
if !first!=="" (set first=!last!) else (set first=!first! !last!)
set last=%%a

)
ENDLOCAL & set "last=%last%" & set "first=%first%"
echo %last%  "and" %first%