引言
说起程序员上班看小说,熟悉vscode的小伙伴很多都听过epub reader这款插件,但是经过我自己的实践,感觉很一般而且很容易被发现。于是自己就想到自己做一个脚本,在命令行输出是否更加更加隐蔽呢。处理文本文件是编程中的常见任务之一。在许多情况下,我们需要逐行或逐块读取文件内容,并根据需要进行显示或处理。
在这篇博客中,我将分享如何使用 PowerShell 读取文本文件,并实现一个简单的交互式脚本,该脚本允许用户通过按 Enter 键或者设置时延自动来控制显示文件的下一部分内容。
背景
PowerShell 是一种跨平台的任务自动化解决方案,包括命令行外壳、脚本语言和配置管理框架。它在 Windows 系统中特别流行,但也可用于 Linux 和 macOS。
场景
假设我们有一个较大的文本文(把小说表达的好听点哈哈哈哈),我们想要逐块阅读它,每次显示固定数量的字符。我们还想通过按键来控制何时显示下一部分内容,而且自己懒得动的时候,也可以设置一个固定时间来输出,以便我们可以有时间阅读当前显示的文本。
实现步骤
-
打开 VSCode:首先,打开 Visual Studio Code。
-
打开新的终端:在 VSCode 中,您可以通过点击顶部菜单的“视图(View)” -> “终端(Terminal)”来打开一个新的终端窗口。这将在 VSCode 的底部打开一个终端。
-
确保使用 PowerShell:在打开的终端中,确保您使用的是 PowerShell。如果不是,您可以通过点击终端左上角的下拉菜单来选择或新建一个 PowerShell 终端。
-
创建脚本:在终端中输入以下命令来创建一个 PowerShell 脚本文件:
notepad $env:USERPROFILE\Desktop\ReadChunks.ps1
-
输入脚本内容:在记事本中输入以下 PowerShell 脚本:
$content = Get-Content -Path "C:\yourPath\example.txt" -Raw $length = $content.Length $i = 0 while ($i -lt $length) { $content.Substring($i, [Math]::Min(20, $length - $i)) Start-Sleep -Seconds 1 # 延迟1秒(可选) $i += 20 }
然后保存并关闭记事本。
如果出现乱码,就时出现编码的问题了,我们可以通过-Encoding
参数指定文件的编码格式
Get-Content -Path "C:\yourPath\example.txt" -Encoding UTF8
-
运行脚本:回到 VSCode 的 PowerShell 终端,运行以下命令来执行脚本:
& "$env:USERPROFILE\Desktop\ReadChunks.ps1"
效果:![](https://img-blog.csdnimg.cn/direct/f62b5f47fb7347d299a56b775db409b4.png)
7.王炸
有人可能要说了,哎哎哎,你这不行啊,小说动不动几万字,要是我退出了,我那还记得看到哪里去了,太鸡肋了吧。这些问题呢,博主也有想到,于是诞生了能够读取上次阅读位置的终极版!!!
# 文本文件和记录文件的路径
$textFilePath = "C:\yourPath\example.txt"
$recordFilePath = "C:\yourPath\lastReadPosition.txt"
# 检查记录文件是否存在,如果存在则从记录的位置开始读取
if (Test-Path $recordFilePath) {
$lastPosition = Get-Content -Path $recordFilePath
$i = [int]$lastPosition
} else {
$i = 0
}
# 读取文本文件
$content = Get-Content -Path $textFilePath -Encoding UTF8 -Raw
$length = $content.Length
# 从上次停止的位置继续读取
while ($i -lt $length) {
$chunk = $content.Substring($i, [Math]::Min(20, $length - $i))
Write-Output $chunk
Start-Sleep -Seconds 1 # 延迟1秒(可选)
$i += 20
# 更新记录文件
$i | Out-File -FilePath $recordFilePath
}
ps:有些人喜欢自动挡,比如说我,但是也有人喜欢手动挡,自己动手能力强,没关系,我也配备了一套手动挡模式,只需要按下Enter就会输出下一行:
$content = Get-Content -Path "C:\yourPath\example.txt" -Encoding UTF8 -Raw
$length = $content.Length
$i = 0
while ($i -lt $length) {
Write-Host $content.Substring($i, [Math]::Min(20, $length - $i)) -NoNewline
$null = Read-Host
$i += 20
}
结语
希望这篇博客能帮助您了解如何在 PowerShell 中有效处理文本文件,也能让你安全且快乐的touch fish!