背景:
> Windows操作系统。
> SQLite数据库文件 myData.db,内有数据表'commits',表中有字段 commit_patch, commit_id, change_count, status等。
需求:
> 将'commit_patch'中的每一条数据都导出为txt文件保存在本地;
> 文件名为[commit_id]_[change_count].txt。
操作步骤:
1. 导出数据表 commits 为csv文件 --> commits.csv
2. 新建 export.ps1 文件,在编辑器中写入以下代码:
$csv = Import-Csv -Path "commits.csv"
$outputFolder = "commit_patches"
New-Item -ItemType Directory -Force -Path $outputFolder | Out-Null
foreach ($row in $csv) {
$fileName = "$outputFolder\$($row.commit_id)_$($row.change_count).txt"
$content = $row.commit_patch
Set-Content -Path $fileName -Value $content -Encoding UTF8
}
3. 在 export.ps1 文件所在目录下,右键选择 Open in terminal。
> 执行:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
> 执行 export.ps1:
.\export.ps1
查看当前目录,可以看到新增了一个名为 commit_patches 的文件夹,保存有导出的所有txt文件。
进阶需求:只保存 status 字段的值为 'modified' 的 commit_patch 数据。
给 export.ps1 添加判断语句:
$csv = Import-Csv -Path "commits.csv"
$outputFolder = "commit_patches"
New-Item -ItemType Directory -Force -Path $outputFolder | Out-Null
foreach ($row in $csv) {
if ($row.status -eq 'modified') {
$fileName = "$outputFolder\$($row.commit_id)_$($row.change_count).txt"
$content = $row.commit_patch
Set-Content -Path $fileName -Value $content -Encoding UTF8
}
}
其他步骤不变。
Done.