首页 > 其他分享 >cmd 使用笔记

cmd 使用笔记

时间:2024-05-08 13:55:07浏览次数:27  
标签:set %% cmd 使用 rem 笔记 echo tokens REM

基础

  • rem 是注释
  • set 命令用于设置变量(注意不要与已存在的环境变量同名)

脚本参数

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 & 连续执行命令
rem goto :EOF 跳转到文件结尾, :EOF 标签是默认存在的,你可以去掉看看效果
: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%

获取用户输入

@echo off

:begin
rem 获取用户输入
rem 定义一个没有初始值的变量
set input=
rem 提示用户输入信息,最后一个冒号是英文冒号
set /p input=请输入字符串:

echo 你输入的字符串是:%input%
rem pause>null

rem 去到 begin 标签处再运行
goto begin

日期时间

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

标签:set,%%,cmd,使用,rem,笔记,echo,tokens,REM
From: https://www.cnblogs.com/lin-hui/p/18179517

相关文章

  • Redis 学习笔记
    1.redis基本数据结构Redis基础数据结构包括:字符串(String) 简单动态字符串列表(List)     压缩列表快速链表集合(Set)    整型数组字典哈希表有序集合(SortedSet,或称为ZSet)压缩列表跳表哈希(Hash)压缩列表字典哈希表位图(Bitm......
  • 使用Selenium做网站登录的免验证
    我发现,我已经三年多没有更新博客了。这几年一直感觉没什么可写的,工作上没遇到的问题python的不多,主要是前端页面上遇到的问题,感觉写起来比较困难,一写就要贴上去很多代码,还没什么必要,不贴又说不明白,所以干脆不写了。 今年换了工作,开始研究新玩意儿了——爬虫。俗话说,爬虫爬得好,......
  • redisearch 安装和使用
    方式一:源码编译安装(未成功)能找到的文档基本都是这一套,但是编译过程中会遇到各种坑,make版本,其他依赖问题,尝试解决无果。#--recursive选项递归下载子模块依赖gitclone--recursivehttps://github.com/RediSearch/RediSearch.gitmakesetupmakebuild#在redis.conf最后......
  • 同事使用 insert into select 迁移数据,开开心心上线,上线后被公司开除!
    作者:xlecho链接:https://juejin.cn/post/6931890118538199048血一般的教训,请慎用insertintoselect。同事应用之后,导致公司损失了近10w元,最终被公司开除。事情的起因公司的交易量比较大,使用的数据库是mysql,每天的增量差不多在百万左右,公司并没有分库分表,所以想维持这个表......
  • .Net Core中使用RabbitMQ
    开发中经常用到发布订阅的功能,之前一直用的Redis,使用过程中也出现了一些问题,后来换了RabbitMQ,用上去更顺手,简单记录一下。正文开始:RabbitMQ是一个开源的,基于AMQP(AdvancedMessageQueuingProtocol)协议的完整的可复用的企业级消息队,RabbitMQ可以实现点对点,发布订阅等消息处......
  • 使用 Docker 部署 TaleBook 私人书籍管理系统
    1)项目介绍GitHub:https://github.com/talebook/talebookTalebook是一个简洁但强大的私人书籍管理系统。它基于Calibre项目构建,具备书籍管理、在线阅读与推送、用户管理、SSO登录、从百度/豆瓣拉取书籍信息等功能。友情提醒:个人是不允许进行在线出版的,维护公开的书籍网站......
  • vue2-事件总线$bus的使用
    作用实现不同组件之间进行通信(非父子关系)。 原理$bus就是vue原型上添加的一个vue实例,用于存储、监听以及触发事件。 实现步骤在main.js文件中注册事件总线Vue.prototype.$bus=newVue();在需要发送信息的组件中发送事件this.$bus.$emit("eventname")//无参......
  • varlet库loading组件模版使用转函数式调用方法
    2024年5月8日10:34:19varlet库loading组件模版使用转函数式调用方法鉴于在H5中varlet.Snackbar在axios请求封装函数中总是会产生阻塞现象问题,而varlet.loading又不能函数式调用。//loading.vue<scriptlang="ts"setup>import{ref,onMounted}from'vue'import{useWi......
  • GO语言学习笔记
    导图:GO语言四大模块 1.调度器2.netpoll3.内存管理4.GC 垃圾回收算法有很多,主要有:引用计数、标记-清除、分代收集口述,gogc的原理三色标记发+混合写屏障思路尽量减少stw的时间,1.只在开始标记阶段和标记结束阶段使用stw,2.标记阶段采用写屏障,将新建和修改的放入单......
  • Golang gin 框架使用 MongoDB 进行多表联查,以及分组查询
    主要针对gin框架中如何使用假设两张表order表{"_id":ObjectId("65aa2b2203abce203bbe3c7a"),"name":"骆驼祥子","route":"/test/v2/desktop","bookshelf":"03"}orderRemark表{......