批处理中的变量和参数(二)
来源:互联网 发布:java adobe 生成pdf 编辑:程序博客网 时间:2024/06/04 23:18
-----siwuxie095
二、自定义变量
一般用 set读入的方法定义和赋值
1、程序里设置变量
set var=Hello World!
echo%var%
pause>nul
sublime中:
2、读入的方法设置变量
set /p var=请输入一个变量:
echo%var%
pause >nul
sublime中:
提到变量就不能不提批处理中的两个符号:% 和 !
批处理中,对变量不用像C语言一样预先定义就可以使用,非常自由
看似自由的机制,却又让人又痛苦:在没有预先说明哪些符号是变量
的情况下,计算机的识别问题。
解决方案:在编程时,对要使用的变量用%标明,在延迟变量的情况下
用!标明
如:常规情况下
@echo off
set num=12
echo%num%
pause
如:延迟变量情况下
@echo off
setlocal enabledelayedexpansion
set num=12
for /l%%i in (1,1,5)do (
set /a num+=10
echo !num!
)
pause
这两个例子就是关于常规情况下变量符号% 和 延迟变量情况下变量符号 !
的使用,其功能在于告诉计算机该串代码是变量
而%0 -%9 和 %* 这十一个符号中的% 不是代表变量,而是参数的意思,
参数和普通变量不同,不能改变参数的值
在for 里的%%i,两个 % 标出的不是普通变量,而是循环变量,
循环变量和普通变量不同,不能改变循环变量的值
for 里的循环变量%%i 和 参数 %0 - %9,其整体代表变量,引用时
不能再对其增加变量符号 %或!
在计算中,% 表示取余,如:
@echo off
set num=100
set /a result=num%%7
echo%result%
pause
在输出格式中,% 表示输出格式的意思%str:~m,n%,详见 set 命令
总结:% 应用范围:变量、参数、循环变量、余数计算、格式
系统参数
%0,%1,%2,%3,%4,%5,%6,%7,%8,%9,%*
对于%1 - %9
%1批处理的第一个参数
%2 批处理的第二个参数
%3 批处理的第三个参数
%4批处理的第四个参数
%5批处理的第五个参数
%6批处理的第六个参数
%7 批处理的第七个参数
%8批处理的第八个参数
%9 批处理的第九个参数
批处理有且仅有这九个参数,不存在%10及以上参数
因为call 命令允许使用参数,先看参数在 call 中的应用:
@echo off
call :loop Hello World!
pause>nul &goto :eof
:loop
echo%1
echo%2
sublime中:
运行一览:
计算机认为Hello World! 是两个参数,如果想让其是一个参数,
应该用双引号(英文格式)引起来
再如:用 call 带参数递归算阶乘
@echo off
title阶乘--递归算法
echo. &echo. & echo阶乘--递归算法
setlocal enabledelayedexpansion
echo. &echo.
set /p n=请输入一个数:
set result=1
if !n!==0 (echo结果等于1 & pause>nul & goto eof) else (call :loop !n!)
echo. &echo结果等于!result!
pause>nul
:loop
if not%1==1 (
set /a result=!result!*%1
set /a x=%1
set /a x-=1
call :loop !x!
)
sublime中:
运行一览:
参数也不止用在 call上,其他例子:
同一个目录下,有两个bat文件:
123.bat:
@echo off
start abc.bat1,2,3,4
call abc.bat a b c d
pause
abc.bat:
@echo off
echo%1
echo%2
echo%3
echo%4
pasue>nul
运行 abc.bat 一览:
运行 123.bat 一览:弹出两个窗口
可见:赋予参数时,参数和参数之间用逗号或空格隔开都可以
如:F盘根目录下有一个 test.bat
@echo off
format%1
在cmd窗口中执行:
在执行 test.bat 时,%1 就表示z:,这样 format %1 就相当于
format z:,即格式化 Z盘
但此程序明显用set 读入更简单:
@echo off
set /p a=请输入一个驱动器号:
format%a%
pause>nul
运行一览:
双击执行 test.bat,输入 z:,若存在 Z盘,就会格式化 Z盘
(显然这里set 比%1 -%9 简单)
再如:F盘根目录下有 test.bat,a.txt,b.txt:
@echo off
type%1
type%2
在cmd窗口中执行:将顺序显示 a.txt,b.txt 中的内容
很明显:同样可以不用%1 - %9 就能实现显示文本文件
再看:删除文件和文件夹
del /f /q%1
rd /q /s%1
在cmd中执行时,像上面一样直接赋予要删除的文件(夹)的名字当
参数即可,实际上可以更简单,直接拖放某文件(夹)到这个bat 文
件上面,即可彻底删除
之所以用了两个命令del 和 rd ,是为了保证可以删除文件以及文件夹,
加上参数,是为了删除前不必经过确认就删除
%* 的作用不是很大,只是返回参数,不过它是一次返回全部参数的值,
不用输入%0 -%9 来一个个确定
如:
@echo off
echo%*
在cmd窗口中执行:空格也一起输出了
参数最多只能有九个,测试程序如下:
@echo off
echo%1
echo%10
echo%11
pause>nul
sublime中:
在cmd窗口中执行:
咋一看,参数在10及以上似乎可以,其实不然,变换测试:
显然,%10 及以上是无效参数,但如果不指定返回参数,用 %*
输出全部参数,参数个数就没有限制了
%0 不是返回参数,其有两层意思:
第一层:如果%0 前有 echo 等命令,则代表返回该批处理所在的绝对路径
第二层:如果%0 前没有任何参数,则代表自身批处理,会无限循环执行
bat(也就是调用自身 bat 程序)
如:
@echo off
echo%0
pause
运行一览:
此显示结果带双引号,如果不想要双引号,这么写:
@echo off
for%%i in (%0)doecho%%~i
pause
运行一览:
再如:无限循环执行net user,即不断显示用户账户信息,
直到你手动停止为止(Ctrl+C)
@echo off
net user
%0
运行一览:
再如:将自身复制到D盘,并命名为 testx.bat
@echo off
echo Hello World!
copy%0 d:\testx.txt
运行一览:
%0 高级用法:
1、最简单的死循环程序,同时也是最简单的批处理程序:
%0
运行一览:不断重复显示自身路径,直到手动停止(Ctrl+C)
2、用%0 实现嵌套和递归
不仅是call 调用函数的时候可以使用参数,%0 同样可以
如:
@echo off
set /a var=%1+1
echo%var%
if%var% lss100 (%0 %var%)else pause
sublime中:
运行一览:从 1显示到 100
如果用 call,就变成:
@echo off
:loop
set /a var=%1+1
echo%var%
if%var% lss100call :loop%var%
pause
sublime中:
效果一样
【made by siwuxie095】
- 批处理中的变量和参数(二)
- 批处理中的变量和参数(一)
- 批处理入门 -- 批处理中的变量
- 批处理中的变量简介
- 关于批处理中的变量
- 关于批处理中的变量
- 批处理中的变量
- 批处理中的变量
- windos批处理中的变量
- 关于批处理中的变量
- 关于批处理中的变量
- 批处理命令和变量
- 批处理中的变量引导符 %
- 第四章 批处理中的变量
- 06-CMD_批处理中的变量
- 批处理FOR命令中的变量
- Java中的变量赋值和参数传递
- .bat批处理(二):%0 %1——给批处理脚本传递参数
- 理工门外的树
- 1003. Emergency (25)
- IOS UItableview UIcollectionview cell高度自适应
- python正则表达式学习
- 【CG物理模拟】风筝模拟
- 批处理中的变量和参数(二)
- 微信小程序_倒计时补零
- 凸包,点到直线距离(飞机场,uva 11168)
- Android Studio 打Jar包和混淆代码。
- Java SE 基础:方法的参数传递
- Python入门
- 11.2.3
- 大学霸kali linux命令学习笔记
- Mac和Ubuntu系统下.bash_profile和.bashrc文件