当前位置: 首页 > web >正文

windows系统自定义powshell批处理脚本

windows自定义powshell批处理脚本

前几天看到大神自定义批处理骚操作操作,觉得很有意思,本篇文章记录一下入门学习笔记。

PowerShell 是一种功能强大的脚本语言和命令行外壳,基于.NET Framework,广泛应用于 Windows 系统管理、自动化任务执行、系统配置等领域。

编写powershell脚本首先要找到系统默认寻找的脚本路径

  1. 获取配置路径
echo $PROFILE
#F:\文档\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

在F:\文档中创建WindowsPowerShell目录,再在该目录下创建Microsoft.PowerShell_profile.ps1文件

Microsoft.PowerShell_profile.ps1文件中就可以编写我们的脚本了,每次打开powershell都会加载该文件。

简单上手

#自定义不需要参数的命令
#function 命令 {命令内容}
function hi{Write-Host "hello world"
}
#自定义需要固定参数的命令
function ha(){param([string] $name)echo hello $name
}
#自定义不固定参数的命令
function hb(){echo hello $args
}

输出

在这里插入图片描述

文本编辑器:可以使用系统自带的记事本,也推荐使用专业的代码编辑器,如 Visual Studio Code,其具有丰富的插件支持,可提高 PowerShell 脚本的编写效率。

基本变量

  1. 变量
    • 变量以 $ 符号开头,例如 $name = "John",定义了一个名为 $name 的变量,并赋值为字符串 "John"
    • 变量的数据类型可以自动推断,也可以显式指定,如 [int]$age = 30,将 $age 定义为整数类型。
  2. 数据类型
    • 字符串:使用双引号 " " 或单引号 ' ' 表示,双引号内可以解析变量,单引号内则按字面输出
    • 整数:如 10-5 等。
    • 浮点数:如 3.14-2.5 等。
    • 数组:使用 @() 表示,例如 $arr = @(1, 2, 3, "a", "b")
    • 哈希表:使用 @{} 表示,例如 $hash = @{"key1" = "value1"; "key2" = 2}
  3. 运算符
    • 算术运算符+(加)、-(减)、*(乘)、/(除)、%(取余)。
    • 比较运算符-eq(等于)、-ne(不等于)、-gt(大于)、-lt(小于)、-ge(大于等于)、-le(小于等于)。
    • 逻辑运算符-and(与)、-or(或)、-not(非)。
  4. 语句块:使用 {} 表示语句块,例如在 if 语句、for 循环等结构中。

Write-Host:内置方法,输出一个字符串或变量

控制结构

条件控制

$num = 10
if ($num -gt 5) {Write-Host "数字大于 5"
} elseif ($num -eq 5) {Write-Host "数字等于 5"
} else {Write-Host "数字小于 5"
}

for循环

for ($i = 0; $i -lt 5; $i++) {Write-Host "当前循环次数:$i"
}

foreach循环

$arr = @(1, 2, 3)
foreach ($element in $arr) {Write-Host "数组元素:$element"
}

while循环

$count = 0
while ($count -lt 3) {Write-Host "当前计数:$count"$count++
}

函数

function Add-Numbers {param([int]$num1,[int]$num2)return $num1 + $num2
}
$sum = Add-Numbers -num1 5 -num2 3
Write-Host "两数之和:$sum"

函数参数:使用 param 关键字定义函数参数,参数可以指定数据类型。

文件操作

系统提供函数 Get-Conten -parh url:获取地址为url的文件内容并返回,如果url为"."表示当前所在路径

  1. 读取文件内容
$content = Get-Content -Path "C:\test.txt"
foreach ($line in $content) {Write-Host $line
}
  1. 写入文件内容
$text = "这是要写入文件的内容"
Set-Content -Path "C:\test.txt" -Value $text
  1. 追加内容到文件
$newText = "这是追加的内容"
Add-Content -Path "C:\test.txt" -Value $newText
  1. 重名名文件
#获取单个文件
$file = Get-Item -Path "C:\Users\Admin\Documents\test.txt"
Rename-Item -Path $file.FullName -NewName $newName

错误处理

  1. try-catch-finally 结构
try {# 可能会出错的代码$result = 10 / 0
} catch {Write-Host "发生错误:$($_.Exception.Message)"
} finally {Write-Host "无论是否发生错误,都会执行这里的代码"
}

数字与字符串相加

在 PowerShell 中,字符串和数字相加的结果取决于具体的情况。

字符串在前,数字在后

字符串在加法运算的左侧,数字在右侧时,PowerShell 会将数字转换为字符串,然后将两个字符串拼接起来。

$str = "结果是:"
$num = 10
$result = $str + $num
Write-Host $result
#结果是:10

数字在前,字符串在后

当数字在加法运算的左侧,字符串在右侧时,PowerShell 会尝试将字符串转换为数字,如果转换成功则进行加法运算,如果转换失败则会抛出异常。

$num = 5
$str = "10"
$result = $num + $str
Write-Host $result
#15

运行段代码时,PowerShell 无法将字符串 "abc" 转换为数字,会抛出异常。

$num = 5
$str = "abc"
$result = $num + $str

显式类型转换

为了避免意外的结果,你可以进行显式的类型转换。如果想将结果作为字符串拼接,可以使用 ToString() 方法将数字转换为字符串:

$num = 20
$str = "数值是 "
$result = $str + $num.ToString()
Write-Host $result

如果想将字符串转换为数字进行加法运算,可以使用相应的类型转换方法,例如 [int] 转换为整数:

$str = "25"
$num = 5
$result = [int]$str + $num
Write-Host $result

实战演练

**demo1:**定义一个命令,为当前目录所有指定后缀文件加上指定前缀

场景:批量为文件添加标识

function SetPreName(){param ([string] $preName,[string] $next)$oldName='*'+$next$files = Get-ChildItem -Path . -Filter $oldNameforeach($file in $files){[string]$newName = $preName + $file.NameRename-Item -Path $file.FullName -NewName $newName}
}  

demo2:定义一个命令,为当前目录所有指定后缀的文件批量命名,从001xxx,xxx对应文件数量.

function SetNumberName(){param([string] $next)$oldName='*'+$next$files = Get-ChildItem -Path . -Filter $oldName[int]$cnt=1[string]$newNameforeach($file in $files){if($cnt -gt 99){$newName=$cnt.ToString()+$next}elseif($cnt -gt 9){$newName='0'+$cnt.ToString()+$next}else{$newName='00'+$cnt.ToString()+$next}Rename-Item -Path $file.FullName -NewName $newName$cnt++}
}
http://www.xdnf.cn/news/1747.html

相关文章:

  • 【Umi】- 配置文件的加载机制
  • Ejs模版引擎介绍,什么是模版引擎,什么是ejs,ejs基本用法
  • PCB数字地和模拟地的连接问题
  • 【android bluetooth 协议分析 06】【l2cap详解 7】【l2c_rcv_acl_data函数解析】
  • 被封号如何申诉?Google Play开发者账号申诉模版分享
  • Dify升级-linux环境下使用zip离线安装方式部署升级
  • vue3+TS 手动实现表格滚动
  • C#进阶学习(十二)协变逆变
  • [C#]反射的实战应用,实际数据模拟
  • CDGP|大模型赋能数据治理:实践案例与深度剖析
  • VITS:基于对抗学习的条件变分自编码器
  • Java大师成长计划之第2天:面向对象编程在Java中的应用
  • 【回眸】Aurix TC397 IST 以太网 UDP 相关开发
  • 【python】Python 中,单下划线(_)和双下划线(__)开头以及结尾的命名方式具有特殊的含义和用途
  • 每日算法——快乐数、两数之和
  • 域控重命名导致无法登录
  • 回溯--一种暴力搜索算法
  • write函数
  • RTSP播放器实现回调RGB|YUV给视觉算法,然后二次编码推送到RTMP服务
  • ORACLE DATAGUARD遇到GAP增量恢复方式修复RAC环境备机的实践
  • C语言教程(十五):C 语言函数指针与回调函数详解
  • 【高并发】 MySQL锁优化策略
  • rsync实现内网两台服务器文件同步
  • Winddows11官网下载安装VMware Workstation Pro17(图文详解)
  • Linux命令-perf
  • 企业办公即时通讯软件BeeWorks,私有化安全防泄密
  • 【MobaXterm】---修改 MobaXterm 终端 默认字体和大小 保真
  • 基于 C++ 的用户认证系统开发:从注册登录到Redis 缓存优化
  • 【技术派后端篇】整合WebSocket长连接实现消息实时推送
  • 《Python3网络爬虫开发实战(第二版)》配套案例 spa6