CMD批处理脚本如何传递并获取/user=格式的命令行参数?
正确提取CMD批处理中
/user=格式的命令行参数值 原脚本的问题出在条件判断语法错误,以及未处理CMD的变量预解析机制,以下是修正后的实现:
方法一:利用变量替换判断并提取
@echo off setlocal enabledelayedexpansion set "user=" REM 遍历所有命令行参数 for %%A in (%*) do ( REM 判断当前参数是否以/user=开头(不区分大小写) if /i "%%A:/user=" neq "%%A" ( REM 提取/user=之后的内容(/user=共6个字符,从第7位开始截取) set "user=%%A:~6%" ) ) REM 输出结果 if defined user ( echo 用户是 !user! ) else ( echo 未提供用户参数 ) endlocal
方法二:结合findstr进行严谨匹配
如果需要校验参数格式的规范性,可以用正则匹配实现:
@echo off setlocal enabledelayedexpansion set "user=" for %%A in (%*) do ( echo "%%A" | findstr /i /r "^\"/user=.*\"$" >nul if !errorlevel! equ 0 ( set "user=%%A:~6,-1" ) ) if defined user ( echo 用户是 !user! ) else ( echo 未提供用户参数 ) endlocal
关键说明:
- 启用
enabledelayedexpansion是为了在for循环内部设置变量后,能在后续代码中正确读取变量值(用!user!代替%user%)。 %%A:/user=是CMD的变量替换语法:把参数%%A中开头的/user=替换为空,若替换结果和原参数不同,则说明参数以/user=开头。- 方法二中的
findstr正则表达式^\"/user=.*\"$用于匹配被引号包裹的/user=xxx格式参数,%%A:~6,-1用于去掉开头的/user=和结尾的引号。
内容的提问来源于stack exchange,提问作者mikekgr
相关产品推荐
相关产品推荐

