[返回编程技术首页]·[所有跟帖]·[ 回复本帖 ] ·[热门原创] ·[繁體閱讀]·[坛主管理]

借助ChatGPT写脚本的经历 powershell

送交者: lyabc[♂★★★声望勋衔13★★★♂] 于 2024-01-26 11:03 已读 2375 次 1赞  

lyabc的个人频道

+关注
借助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文件的一部分



"C:\Program Files\7-Zip\7z.exe" a -tzip "D:\Documents\Adobe\Common\PTX\Files.zip" "D:\Documents\Adobe\Common\PTX\*" -mx=9

我用cmd试了试,是可以的

我最终获得的脚本基本上不用做改动就可以用了,如下:




$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朋友的这个贴子的话, 请点这里投票,“赞”助支持!

已标注为lyabc的原创内容,若需转载授权请联系网友本人。若违规侵权,请联系我们

所有跟帖:   ( 主贴楼主有权删除不文明回复,拉黑不受欢迎的用户 )


用户名: 密码: [--注册ID--]

标 题:

粗体 斜体 下划线 居中 插入图片插入图片 插入Flash插入Flash动画


     图片上传  Youtube代码器  预览辅助



[ 留园条例 ] [ 广告服务 ] [ 联系我们 ] [ 个人帐户 ] [ 创建您的定制新论坛频道 ] [ Contact us ]