windows中cmd和PowerShell批处理命令

简介: 之前在 Git 批量删除本地分支,有用到 Linux 或 MacOS 下的批处理命令,这个命令中的 grep、xargs 本身是 Shell script,在 windows 中的 cmd 和 PowerShell 中是不能用的

之前在 Git 批量删除本地分支,有用到 Linux 或 MacOS 下的批处理命令 xargs:

git checkout master
git branch | grep -v 'master' | xargs git branch -D

因为这个命令中的 grep、xargs 本身是 Shell script,在 windows 中的 cmd 和 PowerShell 中是不能用的。

那如果想要在 windows 中实现上面同样的批处理,该如何实现呢?

cmd 中批处理命令

# 在cmd中用 % 标识变量,如果是批处理程序执行bat文件中需要使用 %% 来表示变量如 %%i

# 在cmd小黑窗窗口中
for %i in (xxx) do command

# 在bat文件中
for %%i in (xxx) do command
  • for、in和do是for语句的关键字,三个缺一不可
  • xxx是任何序列,可以只有一个元素。元素可以是变量、字符串,元素之间用空格键、tab键、逗号、分号或等号分隔
  • xxx必须用()包围,即使只有一个元素
  • %%I是形式变量,即使没有在command中被使用,也不能省略
  • for语句的形式变量I,可以换成26个字母中的任意一个,这些字母会区分大小写,也就是说,%%I和%%i会被认为不是同一个变量
  • 为了不与批处理中的%0~%9这10个形式变量发生冲突,请不要随意把%%I替换为%%0~%%9中的任意一个
  • for语句依次提取(xxx)中的每一个元素,把它的值赋予形式变量I,带到do后的command中参与命令的执行;当执行完一次do后的语句之后,再提取(xxx)中的下一个元素,再执行一次command,如此循环,直到(xxx)中的所有元素都已经被提取完毕,该for语句才宣告执行结束

批处理 for 命令主要作用:

  1. for循环

    for %I in (xxx) do command
    
  2. 文本处理

    for /f %I in (file) do command
    
  3. 对命令执行结果进行处理

    for /f %I in ('command1') do command2
    
  4. 路径扩充

    for /f %I in (pathset) do command
    

for 后面的参数,大小写都可以

  • /D 用于在指定目录内搜索子目录名
  • /R 用于在指定目录内搜索文件名
  • /L 用于以增量形式输出数字序列
  • /F 用于在指定文件内(.txt)搜索文件内容

实现批量处理

1、实现反向过滤

git checkout master
git branch | findStr /I /V master
  • /V 显示所有未包含指定字符串的行
  • /C 仅显示包含字符串的行数
  • /N 显示行号
  • /I 搜索字符串时忽略大小写

2、批处理
for 循环里没找到能怎么直接获取管道符输出的方法,所以只能借助生成一个 txt 文件写入内容,循环了再删掉来实现

# 打印测试
# git branch |(findStr /V master>branch.txt) && (for /f %i in (branch.txt) do echo %i) && del branch.txt

git branch | (findStr /V master > branch.txt) && (for /f %i in (branch.txt) do git branch -D %i) && del branch.txt

PowerShell 中批处理命令

PowerShell 中的条件和循环这些和普通的编程语言比较像,PowerShell 中实现换行多行命令输入,按住 ctrl + Enter

# -lt:小于 (less than)
for($i=0;$i -lt 10;$i++)
{
   
    echo "Hello"
}

为了使用管道符,可以直接用 foreach 来循环处理

git branch | findStr /V master | foreach {
   git branch -D $_.Trim()}

# 注意要用 Trim() 方法去掉获取到的分支名前后的空格,否则会报错
# error: branch '  xxx' not found.

# 当前的分支因为前面有个 * 会报错,不会被删除
error: branch '* master' not found

# 所以其实可以直接用下面的命令
git branch | foreach {
   git branch -D $_.Trim()}

# 强迫症就用这条命令
git branch | findStr /V "* master" | foreach {
   git branch -D $_.Trim()}
相关文章
|
6天前
|
Windows
Windows 命令提示符(CMD)操作(七):扩展命令和功能
Windows 命令提示符(CMD)操作(七):扩展命令和功能
|
6天前
|
缓存 监控 网络协议
Windows网络管理及诊断命令整理
Windows网络管理及诊断命令整理
13 0
|
6天前
|
NoSQL Linux Redis
Redis的介绍,以及Redis的安装(本机windows版,虚拟机Linux版)和Redis常用命令的介绍
Redis的介绍,以及Redis的安装(本机windows版,虚拟机Linux版)和Redis常用命令的介绍
29 0
|
6天前
|
缓存 网络协议 Linux
碎片技能:在 Windows 的任意目录一键快捷进入 CMD 命令行界面
在Windows 10/11中,SaaS服务商常需使用命令行,如PowerShell或CMD。本文介绍了如何进入DOS命令行:通过“开始”菜单→“运行”→输入“cmd”,然后确认。此外,还展示了如何在任意目录快速启动DOS命令行,只需右键点击并选择相应菜单项。提供两种实现方法:一是导入注册表文件,二是使用名为ContextMenuManager的优化软件。建议使用软件方法,易于添加和删除菜单项。
23 1
碎片技能:在 Windows 的任意目录一键快捷进入 CMD 命令行界面
|
6天前
|
Oracle Java 关系型数据库
windows 下 win11 JDK17安装与环境变量的配置(配置简单详细,包含IJ中java文件如何使用命令运行)
本文介绍了Windows 11中安装JDK 17的步骤,包括从官方网站下载JDK、配置环境变量以及验证安装是否成功。首先,下载JDK 17的安装文件,如果没有Oracle账户,可以直接解压缩文件到指定目录。接着,配置系统环境变量,新建`JAVA_HOME`变量指向JDK安装路径,并在`Path`变量中添加。然后,通过命令行(cmd)验证安装,分别输入`java -version`和`javac -version`检查版本信息。最后,作者分享了如何在任意位置运行Java代码,包括在IntelliJ IDEA(IJ)中创建的Java文件,只需去掉包声明,就可以通过命令行直接运行。
|
6天前
|
机器学习/深度学习 人工智能 Windows
一些常见的Windows命令
一些常见的Windows命令
22 0
|
6天前
|
域名解析 缓存 网络协议
16.系统知识-Windows的常用命令
16.系统知识-Windows的常用命令
|
6天前
|
Python Windows
【Python】Windows如何在cmd中切换python版本
【Python】Windows如何在cmd中切换python版本
|
6天前
|
测试技术 API Windows
Windows 如何使用 cURL 命令?快速上手
在工作流程中,为了快速验证 API 接口有效性,团队成员经常转向直接执行 cURL 命令的方法。这种做法不仅节省时间,而且促进了团队效率的提升。对于使用 Windows 系统的用户来说,这里有一套详细的操作指南来执行 cURL 命令。
|
6天前
|
存储 安全 数据安全/隐私保护
【Windows manage-bde 命令】BitLocker 2.0:一步步解锁您的加密驱动器
【Windows manage-bde 命令】BitLocker 2.0:一步步解锁您的加密驱动器
108 0