借助ChatGPT写脚本的经历 powershell
借助ChatGPT写脚本的经历 powershell最近在做一些数据备份的时候,发现文件夹内的小文件太多,导致了上传到网盘的时候速度有点慢。于是就用借助chatGPT写了一个脚本,很快就解决了问题,鉴于有些人虽然知道chatGPT但对于powershell的脚本不熟悉,或者是都有些了解,但不知道可以这样来做,所以我将这个经历写下来,为朋友们做一个参考。
首先简单的介绍一下powershell,这是由微软开发的本来是为了替代batch的一种脚本语言,但后来powershell独立了出来,成为一种跨平台的应用,不仅仅是在Windows下可以执行,在其他的平台包括Linux,甚至MacOS下也是可以执行的。而batch,就是大名鼎鼎的批处理,现在还是可以在windows下用的一种脚本语言,还是许多个人,系统管理者或者是软件开发人员经常借助的。文件扩展名*.bat的就是它了, 双击就能执行。Powershell的扩展名是.ps1, 不太一样的地方是它其实已经是一种编程语言,尽管也可以直接执行,但出于安全性的考虑,不能直接双击执行,而是需要在powershell的执行环境下输入.\powershell.ps1来执行。Powershell脚本不像bat一样,一般都是一次性的,powershell可以进行打包分享,由于它更加的严谨,并且功能上更加强大,powershell的重复利用性大大提高。关于它的优点,我说的也许还是不够清楚的,想了解更多的人,请去google一下,或者问问ChatGPT。我直接演示我通过跟chatGPT的对话吧。这是一个获得powershell脚本,运行测试,然后告诉chatGPT存在的问题并提出新的要求,一步一步的校正,达到自己最终要求的过程。下面是生成的bat文件的一部分 我用cmd试了试,是可以的我最终获得的脚本基本上不用做改动就可以用了,如下:
"C:\Program Files\7-Zip\7z.exe" a -tzip "D:\Documents\Adobe\Common\PTX\Files.zip" "D:\Documents\Adobe\Common\PTX\*" -mx=9
$folderPath = "D:\Documents"
$fileCountThreshold = 50
$excludeFolders = @("D:\Documents\Pictures", "D:\Documents\Music","D:\Documents\Videos","D:\Documents\Projects\WebCrawler\")
$batFilePath = "D:\Documents\PackAllFiles.bat"# 清空之前的 BAT 文件
Remove-Item -Path $batFilePath -ErrorAction SilentlyContinue# 获取所有符合条件的文件夹,并将打包命令添加到 BAT 文件
function Add-CommandToBatchFile($folderPath, $batFilePath) {
$zipFilePath = Join-Path $folderPath "Files.zip"
Add-Content -Path $batFilePath -Value "`"C:\Program Files\7-Zip\7z.exe`" a -tzip `"$zipFilePath`" `"$folderPath\*`" -mx=9`r`n"
}# 递归检查文件夹并添加命令到 BAT 文件
function Get-SubFolderWithLargeNumberOfFiles {
param (
[string]$folderPath,
[int]$fileCountThreshold,
[string[]]$excludeFolders,
[string]$batFilePath
) # 获取当前文件夹内的所有子文件夹
$subFolders = Get-ChildItem -Path $folderPath -Directory # 遍历每个子文件夹
foreach ($subFolder in $subFolders) {
$subFolderPath = $subFolder.FullName # 检查是否在排除列表中
if ($excludeFolders -notcontains $subFolderPath) {
$fileCount = (Get-ChildItem -Path $subFolderPath -File).Count # 如果文件数量超过阈值,则添加命令到 BAT 文件
if ($fileCount -gt $fileCountThreshold) {
Write-Host "文件夹 $subFolderPath 包含大量小文件 ($fileCount 个文件)"
Add-CommandToBatchFile -folderPath $subFolderPath -batFilePath $batFilePath
} # 递归调用自己,检查当前子文件夹的下级子文件夹
Get-SubFolderWithLargeNumberOfFiles -folderPath $subFolderPath -fileCountThreshold $fileCountThreshold -excludeFolders $excludeFolders -batFilePath $batFilePath
}
}
}# 调用递归函数
Get-SubFolderWithLargeNumberOfFiles -folderPath $folderPath -fileCountThreshold $fileCountThreshold -excludeFolders $excludeFolders -batFilePath $batFilePath# 提示用户运行 BAT 文件
Write-Host "已生成打包 BAT 文件: $batFilePath"
Write-Host "请运行该 BAT 文件以执行打包操作。"后记
最后的脚本其实还有一个没解决的问题,就是当我压缩完文件之后,对原本的文件的处理,如果为了省事,我其实可以让chatgpt帮忙修改,或者自己修改在压缩完毕之后,就把小文件都删掉,但文件删除我一般比较谨慎,所以就手动进行了。
贴主:lyabc于2024_01_26 11:10:10编辑
已标注为lyabc的原创内容,若需转载授权请联系网友本人。若违规侵权,请联系我们
所有跟帖: ( 主贴楼主有权删除不文明回复,拉黑不受欢迎的用户 )
楼主前期社区热帖:
>>>>查看更多楼主社区动态...