前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >运维必学 | 函数参数传递-从零开始学Windows批处理(Batch)编程系列教程

运维必学 | 函数参数传递-从零开始学Windows批处理(Batch)编程系列教程

作者头像
全栈工程师修炼指南
发布2023-10-31 17:19:16
7360
发布2023-10-31 17:19:16
举报

本文为作者原创文章,为尊重作者劳动成果禁止非授权转载,若需转载请在【全栈工程师修炼指南】公众号留言,或者发送邮件到 [master@weiyigeek.top] 中我将及时回复。

0x00 批处理(Batch)参数传递

描述: 在批处理可执行文件中,参数变量可以从%0 ~ %9,其中%0表示批处理命令本身,其它参数字符串分别用%1到%9顺序表示,这有点象编程中的实参和形参的关系(即%1是形参而可执行bat文件.BAT是实参),在进行参数传递时通常会在批处理文件名后加的以空格(或者Tab)分隔的字符串。

温馨提示: Windows Batch 批处理系列教程示例脚本可访问作者Github仓库中DevelopLearnig的项目,✈直达-> https://github.com/WeiyiGeek/De‍velopLearnig/tree/main/TerminalScript/bat

1.常规参数传递

描述: 通常情况下如果我们批处理.bat脚本,若想从命令行接收参数,可以使用%0~%9的位置变量。

示例演示:

代码语言:javascript
复制
@echo off
:: 批处理接收命令行参数的传递演示
set a=%0
echo 当前执行文件:%a%
set b=%1
set c=%2
echo 参数1:%a% ,参数2:%c%
:: 将顺序地显示参数1和参数2的文件内容
type %1
type %2
pause

执行结果:

2.使用shift参数移位

Q: 现在问题来了万一有10个及以上参数怎么办?

答案肯定是有的,例如有一种方法就是采用Shift 命令进行参数的移位!!

使用 shift 命令更改批处理文件中可替换参数的位置,每执行一次则向下位移一个参数,例如SHIFT = SHIFT /1SHIFT /2则是将从第二位开始向前移位(1),即会将 %3 移位到 %2,将 %4 移位到 %3, 以此类推但是并且不影响 %0 和 %1。 !

示例1.

代码语言:javascript
复制
@echo off
::10.MoreArgument.bat 1 2 3 4 5 6 7 8 9 a b c d e f
::shift
echo   %1 %2 %3 %4 %5 %6 %7 %8 %9
shift /0 
:: 前移移位即 %2 => %1
echo   %1 %2 %3 %4 %5 %6 %7 %8 %9
shift /1  
echo   %1 %2 %3 %4 %5 %6 %7 %8 %9
shift /2
echo   %1 %2 %3 %4 %5 %6 %7 %8 %9
shift /3
echo   %1 %2 %3 %4 %5 %6 %7 %8 %9
shift /4
echo   %1 %2 %3 %4 %5 %6 %7 %8 %9
shift /5
echo   %1 %2 %3 %4 %5 %6 %7 %8 %9
shift /6
echo   %1 %2 %3 %4 %5 %6 %7 %8 %9
shift /7
echo   %1 %2 %3 %4 %5 %6 %7 %8 %9
shift /8
echo   %1 %2 %3 %4 %5 %6 %7 %8 %9
pause 1>nul

示例2.

代码语言:javascript
复制
@echo od
:: 下面则直接是 %1 然后从 %3 -> %2的位置 , 后面的参数都向前-1
shift /2
echo  %1 %2 %3 %4 %5 %6 %7 %8 %9

执行效果:

示例3.

代码语言:javascript
复制
@echo off
::参数的传递演示
set a=%0
echo 执行文件:%a%
set a=%1
echo Argumnent1:%a%
echo ""

:: 采用Shift的方式
:: 从第九个参数-1, 从而 $10 -> $9 并且不影响前的 0-8 的参数
shift /8
echo "第10个参数为"=%9

执行效果:

温馨提示: 如需处理命令行上9个以上的参数, 亦可以使用for命令组合%*来完成, 例如for %a in (%*) do echo %a


偷偷的告诉你哟?极客全栈修炼】微信小程序已开放

可直接在微信里面直接浏览博主文章哟,后续将上线更多有趣的小工具。


0x01 批处理(Batch)函数定义与返回值

1.函数定义

描述: 在批处理中也是可以定义函数,只不过与常规方式编程方式不同,其使用:加上以字母开头的名称,组成一个使用goto命令跳转的一个片段脚本,注意在使用批处理的处理顺序是从上到小,所以在执行的时候也需要将函数调用放在前面。

示例演示:

代码语言:javascript
复制
@echo off
:: 批处理函数定义与使用

: 函数调用
goto pre

:start
echo "start 函数: 访问【全栈工程师修炼指南】公众号"
goto end

:view
echo "view 函数:正在浏览 https://weiyigeek.top"
goto end 

:pre
echo "pre 函数:正在准备程序运行前的准备"
goto start

:end
(echo "end 函数: 程序停止" )

执行结果:

代码语言:javascript
复制
Y:\DevelopLearnig\TerminalScript\Bat\Day02>3.function.bat
"pre 函数:正在准备程序运行前的准备"
"start 函数: 访问【全栈工程师修炼指南】公众号"
"end 函数: 程序停止"

2.使用call为子函数传递参数

描述: 在批处理中预定的变量之前是不可以被扩充,但我们可以通过call命令将aa作为参数传递给子元素。

例如,下述定义了一个子函数deal,我们将aa变量转换成了变量%1,即符合%x格式,从而可以进行字符串扩充。

示例演示:

代码语言:javascript
复制
@echo off
set aa=C:\Windows\PPP\a.btx
:: call可以传递参数给子函数
call :deal aaa %aa% "c c" ddd eee
pause > nul
:deal
echo %%0 = %0
echo %%1 = %1
:: 变量也可以传递参数
echo %%2 = %2
echo %%3 = %3
echo %%4 = %4
echo %%5 = %5

温馨提示: 上述示例必须采用%%1来输出"%1"字符串,而不用^来转义%,否则就会理解成为%1参数。

代码语言:javascript
复制
:: 转义模式错误的演示, 上述将 %aa% 传递 %2 变量。

echo ^%%2 = %2  
:: True 上面%%1形式相同
:: %2 = C:\Windows\PPP\a.btx

echo ^%2 = %2   
:: Error
:: C:\Windows\PPP\a.btx =  C:\Windows\PPP\a.btx

本文至此完毕,更多技术文章,尽情等待下篇好文!

原文地址: https://blog.weiyigeek.top/2023/6-28-755.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈工程师修炼指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 批处理(Batch)参数传递
    • 1.常规参数传递
      • 2.使用shift参数移位
      相关产品与服务
      云开发 CloudBase
      云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档