• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
拥包 AI,使用 AI。
不断向前
博客园    首页    新随笔    联系   管理    订阅  订阅
cmd 使用笔记

基础

再使用前,请多花些时间将基础学好,高级的使用都是有强大的基础作为支撑的。

  • rem 是注释
  • set 命令用于设置变量(注意不要与已存在的环境变量同名)
  • 命令不分大小写
  • ss64.com 英文网站,资料详细

传递命令行参数到批外理文件

echo %%0 = %0
echo %%1 = %1
echo %%2 = %2
echo %%3 = %3
echo %%4 = %4
echo %%5 = %5

REM echo %%1 = %1 
REM 上面这句表示:%%1 转义为 %1, 而 %1 表示第一个命令行参数

参考网址:传递命令行参数到批外理文件

setlocal

开启局部范围,范围结束,恢复原本变量的值。延时展开(delaed expansion), 需要使用 !var! 来展开变量,原本是这样的 %var% 。
默认情况下,变量扩展只在每个循环开始时发生一次。

@echo off
set var1=jkl1
set var2=abc2
set "var1=%var2%" & set "var2=%var1%"
echo var1=%var1% \t var2=%var2%

setlocal EnableDelayedExpansion 
REM setlocal EnableDelayedExpansion
Set "_var=first"
Set "_var=second" & Echo %_var% !_var!
REM first
endlocal

Set "_var=first"
Set "_var=second" & Echo %_var%

顺序执行命令

REM 顺序执行两行命令
echo first & echo second

REM && 是条件运算符,与 & 不同
echo first && echo second

for

rem 在cmd窗口中,for之后的形式变量I必须使用单百分号引用,即%i;而在批处理文件中,引用形式变量i必须使用双百分号,即%%i。

rem 对目录使用 for
for /d %%d in (.) do dir %%d

rem 对一类文件使用
@REM for %%f in (*.bat) do type %%f

rem 对一个文件使用
@REM ----------------------------------------------------------------------------------------------
for /f "eol=; tokens=2,3* delims=," %%i in (myfile.txt) do @echo %%i %%j %%k
for /f "tokens=1-5 delims=:," %%a in (易经.txt) do echo %%a %%b %%c %%d %%e

@REM 通俗讲,共同提取每一行的第m小节的内容。
@REM 因此,可以用该命令来指定提取文本信息。
@REM tokens=有时表示提取全部。
@REM tokens=m表示提取第m列。
@REM tokens=m,n表示提取第m列和第n列。
@REM tokens=m-n表示提取第m列至第n列。
@REM Tokens=*表示删除每行前面的空格。忽略行首的所有空格。
@REM tokens=m*提取第m列以后的所有字符,星号表示剩余的字符。
@REM tokens=m,*提取第m列以后的所有字符,星号表示剩余的字符。
@REM 输出变量的个数由定义了的tokens决定。
@REM 在 FOR 语句中显式声明 %%i。使用tokens= 隐式声明%%j 和%%k。只要不会引起试图声明高于字母“z”或“Z”的某个变量,则使用tokens= 可以指定最多 26 个输出变量。

@REM 在使用 usebackq 的情况下
@REM `dir` 作为命令
@REM “dir" 作为文件

@REM 在没有使用 usebackq 的情况下
@REM `dir` 系统不能找到 dir
@REM “dir" 作为字符串

@REM usebackq 用于处理带空格的字符串
@REM ----------------------------------------------------------------------------------------------

rem 对步长使用
for /l %%i in (1, 1, 10) do @echo %%i

@REM for /f "eol=; tokens=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k

参考网址:https://www.cnblogs.com/Jian-Zhang/p/6066429.html
参考网址:https://www.hxstrive.com/subject/windows_bat.htm?id=74
参考网址:https://www.cnblogs.com/it-tsz/p/11306672.html

实现函数功能

call :helloworld Hello World
rem call 命令用于调用另一个脚本,或一个标签,后面跟的是参数
rem :helloworld 是一个标签,可以在定义前使用

set return_value = 0

goto :endhelloworld
rem goto 调转到指定的标签

:helloworld

if 9 GTR 7 (
set return_value = 1
echo %1
) else (
set return_value = 0
)
echo 函数内
goto :EOF
rem & 连续执行命令
:endhelloworld

echo 函数外

得到命令执行的结果

@echo off

set attr = ""
setlocal EnableDelayedExpansion
REM for /f "usebackq" %%i in (`dir`) do set attr=!attr!;%%i
REM for /f "usebackq eol=} delims={" %%i in (`dir`) do @echo %%i
REM for /f "usebackq eol=} delims={" %%i in (`dir`) do set attr !attr!;%%i

dir > testdir.txt

for /f %%i in (testdir.txt) do echo %%i

echo %attr%
endlocal

读取文件内容

rem 方法一
for /f %%i in (.\tmp.txt) do echo %%i

rem 方法二
set /P qq=<tmp.txt

字符串

@echo off

set str=abcdefghijkl

rem 前面4个字符
echo %str:~0,4%
rem 后面4个字符
echo %str:~-4%
rem 第一个到倒数第5个字符
echo %str:~0,-4%
rem 3 到 4
echo %str:~2,3%
rem 倒数第二个开始,提取5个字符
echo %str:~1,5%

rem 拼接
set str1=abc
set str2=abc
set %str3=%aa%%bb%"

rem 替换
echo %str:a=jkl%

参考网址:子串(substring)
参考网址:编辑/替换变量中的文本

日期时间

REM 时间
echo 当前时间:%time%  %time:~0,2%点%time:~3,2%分%time:~6,2%秒

if

获取用户输入,判断输入是否为指定的字符:

@echo off

set /p isOk=Are you ok?(y/n):

if /i "%isOk%"=="y" call :yes_func
if /i "%isOk%"=="n" call :no_func

rem /i 大小写不敏感的匹配

goto :eof

rem call 调用一个子程,可以传递参数
rem goto :eof 去到当前批处理文件的最后,或是子程(subroutine)的最后
rem EXIT /b 有选项可以设置指定的 errorlevel, 0 表示成功;1 或更大的值,表示错误
rem EXIT /b 没有退出码,它的作用与 goto :eof 相同

:yes_func
echo yes
goto :eof

:no_func
echo no
goto :eof

参考网址:ss64 | if
参考网址:获取输入
参考网址:goto | ss64
参考网址:set /p 获取整个输入| ss64

choice | ss64

接受用户输入,并交给批处理文件。可以从键盘捕获一个键的按压。

@echo off
CHOICE /C:rg /m "choose [R]ed or [G]reen"
rem at this point the errorlevel will contain either 1 or 2
rem 在这里,errorlevel 要么是 1 ,要么是 2
goto sub_%ERRORLEVEL%

:sub_1
Echo You typed R for red.
goto:eof

:sub_2
Echo You typed G for green.
goto:eof

参考网址

ss64
ss64 | 分类索引
cmd | Microsoft Learn

posted on 2024-05-08 13:50  小明111222333  阅读(99)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3