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

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++}
}

相关文章:

  • AOSP CachedAppOptimizer 冻结方案
  • 哑光蓝色调风光人像Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • 部署本地知识库,怎么选择 vllm 和 langchain_ollama
  • MATLAB 中的图形绘制
  • Cadence 建立复合原理图封装时怎么切换页面
  • Django创建的应用目录详细解释以及如何操作数据库自动创建表
  • JavaScript 中的尾递归:优点与应用场景
  • Trae+DeepSeek学习Python开发MVC框架程序笔记(四):使用sqlite验收用户名和密码
  • VIC-3D非接触全场应变测量系统用于小尺寸测量之电子元器件篇—研索仪器DIC数字图像相关技术
  • containerd 配置代理
  • 如何在 Dialog 中安全初始化 ECharts 并自动监听容器大小变化
  • 优选算法第十讲:字符串
  • Axure疑难杂症:母版菜单设置打开链接后菜单选中效果
  • 【专题刷题】二分查找(一):深度解刨二分思想和二分模板
  • 从机械应答到智能对话:大模型为呼叫注入智慧新动能
  • 济南国网数字化培训班学习笔记-第二组-4节-输电线路工程安全管理
  • 服务器部署LLaMAFactory进行LoRA微调
  • 矩阵系统源码搭建账号分组功能开发全流程解析,支持OEM
  • 【Python笔记 04】输入函数、转义字符
  • Linux系统之----进程优先级、调度与切换
  • “五一”前多地市监部门告诫经营者:对预订客房不得毁约提价
  • 冲击一英里4分钟大关,基普耶贡挑战女子中长跑极限
  • 著名哲学家、中山大学哲学系原系主任李锦全逝世
  • 上海车展上的双向奔赴:跨国车企融入中国创新,联手“在中国,为全球”
  • 阿联酋首个AI博士项目设立,助力人才培养与科技转型
  • “听公交时听一听”,上海宝山街头遍布“有声图书馆”