参考资料
目录
零. 前提
0.1 打开PowerShell窗口
⏹按住Shift后,单击鼠标右键,即可打开PowerShell窗口
⏹快捷键 Win + X
还可以通过管理员模式打开PowerShell窗口
⏹在Windows的开始菜单的应用中也可以找到
0.2 创建Powershell
⏹如果只是复制粘贴别人写好的Powershell,创建一个文本文件,粘贴完内容后
不能直接保存,而是应该另存为,然后指定编码为带有 BOM 的 UTF-8
,
否则脚本运行的时候会报乱码错误。
⏹指定为编码后,将文件后缀由.txt
改为.ps1
即可运行。
💥如果我们不指定编码为带有 BOM 的 UTF-8
的话,通过Windows自带的IDE也可以看到,脚本内容是乱码的。
🧐当指定编码为带有 BOM 的 UTF-8
,通过Windows自带的IDE可以看到,脚本内容不乱码,正常显示。
0.3 运行PowerShell
⏹PowerShell脚本的后缀是.ps1
,选中脚本,然后使用PowerShell运行
,即可执行脚本
⏹还可以选择打开
后,使用Windows自带的IDE编辑并运行调试PowerShell脚本
一. 文件夹操作
1.1 批量创建编号文件夹
- 在当前目录下,创建以新建文件夹开头的10个文件夹
mkdir (
1..10 | %{"新建文件夹$_"}
)
1.2 批量创建指定的文件夹
- 创建多级目录,使用
-p
参数,多级目录间用斜杠分隔
mkdir -p 一级目录/二级目录/三级目录
- 创建多个同级文件夹
mkdir -p 同级目录1,同级目录2,同级目录3
1.3 获取当前文件夹下所有的文件夹名
-dir
:表示仅获取文件夹名,而不是文件名-r
:表示递归
# 获取全路径文件夹名称
Get-ChildItem -dir | ForEach-Object {$_.FullName}
# 递归获取全路径文件夹名称
Get-ChildItem -dir -r | ForEach-Object {$_.FullName}
# 不获取路径,仅获取文件夹名称
Get-ChildItem -dir | ForEach-Object {$_.Name}
二. 文件操作
2.1 批量创建文本文件
1..5 | ForEach-Object {
# 指定要创建的文件格式
$fileName = "数据文件_$_.csv"
# 创建文件
New-Item -Path $fileName -ItemType File
}
2.2 获取指定文件夹下的文件名
Write-Host
和echo
:将文本打印在控制台上$host.UI.RawUI.ReadKey()
:用于从用户输入获取单个按键信息的命令。- 会暂停脚本的执行,直到用户按下一个键并返回有关按键的信息。
- 只能用于直接运行ps1文件,如果使用IDE调试的话,会提示报错。
- 在powershell中使用反引号`来换行
-Recurse
表示递归获取,还可简写为-r
-File
表示获取的是文件,而不是文件夹-Filter *.mp3
表示过滤出mp3文件$_.FULLNAME
表示获取文件的全路径$_.NAME
表示仅获取名称$HOME
表示当前登录用户的目录文件夹
# 设置要扫描的文件夹路径
$folderPath = "E:\mp3"
<#
构建输出文件的完整路径,将结果输出到桌面上的all_file_name.txt文件中
$HOME表示当前电脑登录用户所在的目录
#>
$outputFilePath = "$HOME\Desktop\all_file_name.txt"
# _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
<#
获取文件夹下所有文件的名称
1. 在powershell中使用反引号`来换行
2. -Recurse 表示递归获取,还可简写为 -r
3. -File 表示获取的是文件,而不是文件夹
4. -Filter *.mp3 表示过滤出mp3文件
5. $_.FULLNAME 表示获取文件的全路径
6. $_.NAME 表示仅获取名称
#>
$fileNames = Get-ChildItem -Path $folderPath -Recurse -File -Filter *.mp3 `
| ForEach-Object {$_.FULLNAME}
# 输出每个文件名到文件,并指定格式为UTF-8
$fileNames | Out-File -FilePath $outputFilePath -Encoding UTF8
# _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
# 将指定文本打印在控制台上
Write-Host "脚本执行完毕。获取到的文件名称如下:"
echo "=========================="
# 将获取到的文件名称打印在控制台上
$fileNames | ForEach-Object {echo $_}
echo "=========================="
echo "按任意键关闭窗口。"
# 暂停脚本执行
$host.UI.RawUI.ReadKey()
2.3 重命名
2.3.1 单文件重命名
- 通过
rename-Item
即可实现
rename-Item 'D:\TEST\old_name.txt' -NewName '新文件名.txt'
2.3.2 批量重命名
⏹Powershell版本
$PWD
:表示当前路径$_.Extension
:获取后缀名
# 定义一个计数变量i
$i = 0
# $PWD 表示当前路径
Get-ChildItem -Path $PWD -Filter *.jpg |
ForEach-Object {
# 构建新的文件名
$newName = 'pic_{0:d6}{1}' -f $i++, $_.Extension
# 对每一个文件进行重命名
Rename-Item -Path $_.FullName -NewName $newName
}
⏹bat版本,创建文本文件,后缀改为.bat
,双击运行即可。
@echo off
setlocal enabledelayedexpansion
set var=0
echo %var%
set /a i = i + var
for %%x in (*) do (
if not "%%x"=="rename.bat" (
set /a i+=1
rename "%%x" "picture-!i!.jpg"
)
)
pause
2.3.3 文件名添加前缀
get-childItem *.txt | rename-Item -newname {'前缀_' + $_.name}
2.3.4 文件名修改后缀名
- 因为
-replace
的模式匹配字符串参数支持正则表达式,因此.txt
要转义为\.txt
。
Get-ChildItem *.txt | Rename-Item -newname { $_.name -replace '\.txt','.html' }