Loading...
windows脚本bat的书写
9/20/2024, 9:52:27 AM
开发
bat/cmd脚本不区分大小写, 且不能以分号;作为结束符。
参考文章1
即.ps1和.bat的区别 .ps1 和 .bat 是两种不同的脚本文件类型,分别用于 PowerShell 和 Windows 批处理。它们在语法、功能和用途上有很大的区别:
.ps1 是 PowerShell 脚本文件的扩展名,用于编写和执行 PowerShell 脚本。 .bat 是 Windows 批处理脚本文件的扩展名,用于编写和执行一系列 Windows 命令。
PowerShell 脚本语言更先进,具有强大的处理能力,支持条件语句、循环、函数、异常处理等高级编程特性,可以进行复杂的系统管理和自动化任务。 批处理脚本在功能上较为受限,主要用于执行基本的文件操作、应用程序启动、用户交互等。
CMD注释形式,存在4种,但是严格意义上的注释存在3种(即下述列举的前3个),另外几种只是特殊运行模式的代码(虽然被叫做注释,但是注释的代码在一定程度上执行或部分执行了):
:: 注释内容,如
:: 哈哈哈这是注释 echo 123
: 注释内容(注意单冒号后面的空格)
: 我好像在哪见过你
:: 这一行是注释,但是指令会在命令行中显示 rem echo 1561 :: 这一行是注释,但是指令不会在命令行中显示 @rem echo 1561
**@**用于关闭某个命令的调试信息,意思是说使用@标注的命令不会打出命令本身、直接运行并返回结果。 如下面一句就直接打印字符串,并不在命令行中打出命令本身。
@echo hello, windows cmd
它有两个功能:打印消息、调试开关。如果参数是on 或者off,代表打开、关闭调试(或者说回显命令本身),如果后面是其它内容,则参数代表要输出的消息。
以下代码bat1.bat
REM open the cmd echo (注释) @echo on (开启 调试信息) echo hello, windows cmd
结果:
D:Notewindows cmd>REM open the cmd echo D:Notewindows cmd>echo hello, windows cmd hello, windows cmd hello, windows cmd
以下代码bat2.bat
REM close the cmd echo @echo off echo hello, windows cmd @echo hello, windows cmd
结果:
D:Notewindows cmd>REM close the cmd echo hello, windows cmd hello, windows cmd
call 调用另一个批处理文件或命令(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前脚本文件并继续执行当前文件的后续命令)。
@echo off echo start calling call ./comment.bat echo end calling
在批处理(.bat)脚本中,你可以使用 ·set /p 命令来获取用户的输入。这个命令会提示用户输入一些文本,并将输入的文本赋值给一个变量。
@echo off set /p username="who are you, Mr?: " echo %username% pause
请注意,批处理脚本中的变量名是不区分大小写的,但通常为了保持一致性,我们会使用小写字母来命名变量。此外,变量名前后的空格会被忽略,但最好在赋值时避免在变量名和等号之间添加空格,以避免混淆。
set 变量名的方式使用变量名,而%变量名%的方式使用变量。
@echo off Set inputValue=15 echo %inputValue%
跳转命令
:label #行首为:表示该行是标签行,标签行不执行操作 echo 123 goto label #跳转到指定的标签那一行
标签(Labels)是用于跳转到脚本中特定位置的标识符。它们通常与 goto 命令一起使用,以实现条件执行、循环或其他流程控制结构。
标签是一个以冒号(:)开头的标识符,可以放置在脚本的任何位置。当 goto 命令被执行时,它会将脚本的执行流程转移到指定的标签位置。
案例如下:
@echo off set value=16 echo value = %value% :test echo testLink @REM 使用exit推出程序,不然慧继续执行后续代码,即这里就会死循环 exit if %value%==16 ( goto test ) @REM 下面这一行不会执行 pause
条件判断
案例1:
@echo off Set inputValue=15 if %inputValue%==15 (echo %inputValue%等于15) if %inputValue% equ 15 (echo %inputValue%等于15) pause
案例2:
@echo off :: 这里加不加双引号都可以 set "variable=Hello" if "%variable%"=="Hello" ( echo The variable is Hello ) else ( echo The variable is not Hello ) echo This is the end of the script.
案例3:
@echo off rem %1 是接受程序的外部输入参数,代表第一个参数 if "%1"=="t" goto _A if not "%1"=="t" goto _B rem goto 命令是组合使用的, goto 和 : (冒号) :_A mkdir c:\Users\Administrator\Desktop\A pause & exit :_B mkdir c:\Users\Administrator\Desktop\B pause
一般for循环:
@echo off for %%F in (C:\path\to\files\*.txt) do ( echo Processing file: %%F REM 在这里添加处理文件的命令 )
注意:在批处理文件的上下文中,你需要使用 %%F 作为变量。如果你在命令提示符下直接运行这些命令,只需使用 %F。
for /L 循环(计数循环):
@echo off for /L %%i in (1,1,10) do ( echo Number is %%i REM 在这里添加处理每个数字的命令 )
在这个例子中,for /L 循环从 1 开始,每次增加 1,直到 10(包括 10)。%%i 是循环变量。
pwd)或改变当前目录。cat命令),如type c:boot.ini 默认情况下,在 bat 脚本文件中,如果中文不是ANSI编码,就会出现乱码。因此,可以采用Windows操作系统平台自带的记事本打开脚本文件,点击菜单【文件】-【另存为】操作,选择ANSI编码进行保存。
bat/cmd脚本不区分大小写, 且不能以分号;作为结束符。
文章目录