windows系统自定义powshell批处理脚本
windows自定义powshell批处理脚本
前几天看到大神自定义批处理骚操作操作,觉得很有意思,本篇文章记录一下入门学习笔记。
PowerShell 是一种功能强大的脚本语言和命令行外壳,基于.NET Framework,广泛应用于 Windows 系统管理、自动化任务执行、系统配置等领域。
编写powershell脚本首先要找到系统默认寻找的脚本路径
- 获取配置路径
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 脚本的编写效率。
基本变量
- 变量
- 变量以
$
符号开头,例如$name = "John"
,定义了一个名为$name
的变量,并赋值为字符串"John"
。 - 变量的数据类型可以自动推断,也可以显式指定,如
[int]$age = 30
,将$age
定义为整数类型。
- 变量以
- 数据类型
- 字符串:使用双引号
" "
或单引号' '
表示,双引号内可以解析变量,单引号内则按字面输出。 - 整数:如
10
、-5
等。 - 浮点数:如
3.14
、-2.5
等。 - 数组:使用
@()
表示,例如$arr = @(1, 2, 3, "a", "b")
。 - 哈希表:使用
@{}
表示,例如$hash = @{"key1" = "value1"; "key2" = 2}
。
- 字符串:使用双引号
- 运算符
- 算术运算符:
+
(加)、-
(减)、*
(乘)、/
(除)、%
(取余)。 - 比较运算符:
-eq
(等于)、-ne
(不等于)、-gt
(大于)、-lt
(小于)、-ge
(大于等于)、-le
(小于等于)。 - 逻辑运算符:
-and
(与)、-or
(或)、-not
(非)。
- 算术运算符:
- 语句块:使用
{}
表示语句块,例如在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为"."
表示当前所在路径
- 读取文件内容:
$content = Get-Content -Path "C:\test.txt"
foreach ($line in $content) {Write-Host $line
}
- 写入文件内容:
$text = "这是要写入文件的内容"
Set-Content -Path "C:\test.txt" -Value $text
- 追加内容到文件:
$newText = "这是追加的内容"
Add-Content -Path "C:\test.txt" -Value $newText
- 重名名文件
#获取单个文件
$file = Get-Item -Path "C:\Users\Admin\Documents\test.txt"
Rename-Item -Path $file.FullName -NewName $newName
错误处理
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:定义一个命令,为当前目录所有指定后缀的文件批量命名,从001
到xxx
,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++}
}