CMD Bat 之间调用传参

本文详细介绍了在CMD环境下如何通过bat文件传递参数,包括使用setinput和调用其他bat文件的方法,并提供了实际输出示例。重点在于理解CMD中bat文件参数传递的机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

a.bat文件内容:

set input=%1%


echo 这里是a.bat 运行代码:调用a.bat时,传了参数:%input%


pause


b.bat文件内容:

%~dp0\a.bat 调用a.bat传入的参数143124124

pause


输出:

D:\>D:\\a.bat 调用a.bat传入的参数143124124

D:\>set input=调用a.bat传入的参数143124124

D:\>echo 这里是a.bat 运行代码:调用a.bat时,传了参数:调用a.bat传入的参数1431241
24
这里是a.bat 运行代码:调用a.bat时,传了参数:调用a.bat传入的参数143124124

D:\>pause
请按任意键继续. . .


参考资料:

才CMD中调用bat文件时,如何给bat文件传入参数,请高手~~!

http://topic.youkuaiyun.com/u/20100304/16/a8902d50-9bd7-4da0-9df6-1af69449fea0.html


CMD获取当前目录的绝对路径

http://ctwen.iteye.com/blog/1172782


CMD 百度百科

http://baike.baidu.com/view/596598.htm

<think>我们参考用户提供的引用,特别是引用[2]和引用[4],来回答如何在Windows批处理脚本中接收外部传入的参数。引用[2]中提到,批处理脚本通过%1、%2、%3等变量来访问命令行参数,其中%1表示第一个参数,%2表示第二个参数,以此类推。引用[4]则进一步说明,参数可以使用修饰符(如%~f1、%~d1等)来获取参数的特定部分(如完整路径、驱动器号等)。因此,在批处理脚本中接收外部传入的参数,主要使用以下方法:1.直接使用%1到%9来获取前9个参数。2.当参数超过9个时,使用`shift`命令来移动参数,以便访问第10个及以后的参数。3.使用参数修饰符来提取参数的特定部分(例如,%~f1表示第一个参数的完整路径)。下面我们通过一个示例脚本来展示如何接收参数:```batch@echooffREM示例:接收外部传入的参数并打印echo脚本名称:%0echo第一个参数:%1echo第二个参数:%2echo第三个参数:%3REM使用参数修饰符ifnot"%~1"==""(echo第一个参数的完整路径:%~f1echo第一个参数的驱动器号:%~d1echo第一个参数的路径:%~p1echo第一个参数的文件名:%~n1echo第一个参数的扩展名:%~x1)REM处理超过9个参数:使用shift:loopif"%~1"==""gotoendecho当前参数:%1shiftgotoloop:endecho参数处理完毕。pause```使用示例:假设我们将上述脚本保存为`test.bat`,然后在命令提示符中运行:```test.bat"C:\ProgramFiles\file.txt"hello123```输出将会显示:```脚本名称:test.bat第一个参数:"C:\ProgramFiles\file.txt"第二个参数:hello第三个参数:123第一个参数的完整路径:C:\ProgramFiles\file.txt第一个参数的驱动器号:C:第一个参数的路径:\ProgramFiles\第一个参数的文件名:file第一个参数的扩展名:.txt当前参数:"C:\ProgramFiles\file.txt"当前参数:hello当前参数:123参数处理完毕。请按任意键继续...```注意:-%0代表脚本本身的名字。-如果参数包含空格,则应该用双引号括起来(如示例中的第一个参数)。-参数修饰符(如%~f1)会去掉参数两边的引号(如果有),并扩展为完整路径(如果参数是文件或目录的路径)。另外,当参数个数超过9个时,我们必须使用`shift`命令来移动参数。每次执行`shift`,都会将参数列表向左移动一位,即原来的%2变成%1,%3变成%2,以此类推。这样我们就可以通过循环来处理多个参数。引用[2]中提到,超过9个参数可以使用`shift`,上面的示例中也包含了使用循环处理任意多个参数的方法。此外,引用[4]还提到了一系列参数修饰符,这些修饰符可以让我们获取参数的不同部分,这在处理文件路径时特别有用。因此,接收外部参数的核心就是使用%1到%9以及`shift`命令,同时可以灵活运用参数修饰符来提取需要的部分。最后,我们根据上述内容生成相关问题。</think> 在Windows批处理脚本中接收外部参数主要通过**位置参数**实现,以下是完整的参数处理方法: ### 一、基础参数访问方法 1. **位置参数变量**:使用`%1`到`%9`访问前9个参数 ```batch @echo off echo 脚本名称:%0 echo 第一个参数:%1 echo 第二个参数:%2 ``` 调用方式:`script.bat hello world` 2. **超出9个参数的处理**:使用`shift`命令 ```batch :loop IF "%1"=="" GOTO end echo 参数值:%1 SHIFT :: 左移参数位置 GOTO loop :end ``` ### 二、参数修饰符(扩展属性) 对参数进行智能解析: ```batch echo 完整路径:%~f1 :: C:\file.txt echo 驱动器号:%~d1 :: C: echo 不含文件名路径:%~p1 :: \subdir\ echo 不含扩展名文件:%~n1 :: file echo 扩展名:%~x1 :: .txt ``` ### 三、带空格的参数处理 1. **用户传入时使用引号包裹**: ```cmd script.bat "包含空格的参数" normal_param ``` 2. **脚本内去掉包裹引号**: ```batch set arg1=%~1 set arg2=%~2 ``` ### 四、参数处理最佳实践 ```batch @echo off :: 示例脚本接收3个参数 if "%3"=="" ( echo 错误:需要至少3个参数[^2] exit /b 1 ) set file=%~f1 :: 获取完整路径 set mode=%~2 :: 模式参数 set times=%~3 :: 次数参数 :: 特殊字符安全使用 echo 处理文件 "%file%"... echo 执行模式 %mode% %times% 次 ``` ### 五、参数验证技巧 ```batch :: 数字类型验证 echo %3|findstr /r "^[0-9]*$" >nul || ( echo 错误:%3 必须是数字[^4] exit /b 1 ) ``` > **关键注意事项**: > 1. `%0` 始终表示脚本自身名称 > 2. 参数总数可通过遍历+计数实现 > 3. 超过9个参数时**必须**使用`SHIFT`命令[^2] > 4. 带空格参数**必须**用双引号包裹传递[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值