无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 244|回复: 16
打印 上一主题 下一主题

win7下剪贴板保存为自定格式文本

[复制链接]
跳转到指定楼层
1#
发表于 昨天 15:14 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
找ai写了个脚本,复制回来是utf8格式,unix(LF)换行符,是不是很不方便?
我这个就是解决这个问题
  1. Option Explicit
  2. Sub Main()
  3.     On Error Resume Next
  4.     Dim clipboardText
  5.     clipboardText = GetClipboardText()
  6.     If IsEmpty(clipboardText) Then
  7.         MsgBox "剪贴板中没有文本内容或无法访问剪贴板!", vbExclamation, "错误"
  8.         Exit Sub
  9.     End If
  10.     If clipboardText = "" Then
  11.         MsgBox "剪贴板中没有文本内容!", vbExclamation, "错误"
  12.         Exit Sub
  13.     End If
  14.     Dim convertedText
  15.     convertedText = ConvertTextFormat(clipboardText)
  16.     Dim filePath
  17.     filePath = ShowSaveDialog()
  18.     If filePath = "" Then
  19.         Exit Sub
  20.     End If
  21.     If SaveTextToFile(convertedText, filePath) Then
  22.         MsgBox "文件保存成功!" & vbCrLf & "路径:" & filePath, vbInformation, "成功"
  23.     Else
  24.         MsgBox "文件保存失败!", vbExclamation, "错误"
  25.     End If
  26. End Sub
  27. Function GetClipboardText()
  28.     On Error Resume Next
  29.     Dim objHTML, clipboardText
  30.     Set objHTML = CreateObject("htmlfile")
  31.     clipboardText = objHTML.ParentWindow.ClipboardData.GetData("text")
  32.     If Err.Number <> 0 Then
  33.         Err.Clear
  34.         Dim objShell
  35.         Set objShell = CreateObject("WScript.Shell")
  36.         Dim tempFile, objFSO
  37.         Set objFSO = CreateObject("Scripting.FileSystemObject")
  38.         tempFile = objFSO.GetSpecialFolder(2) & "\clipboard_temp.txt"
  39.         objShell.Run "powershell -Command Get-Clipboard | Out-File -FilePath """ & tempFile & """ -Encoding UTF8", 0, True
  40.         WScript.Sleep 500 ' 等待文件写入
  41.         If objFSO.FileExists(tempFile) Then
  42.             Dim objStream
  43.             Set objStream = CreateObject("ADODB.Stream")
  44.             objStream.Charset = "UTF-8"
  45.             objStream.Open
  46.             objStream.LoadFromFile tempFile
  47.             clipboardText = objStream.ReadText
  48.             objStream.Close
  49.             objFSO.DeleteFile tempFile, True
  50.         End If
  51.     End If
  52.     GetClipboardText = clipboardText
  53.     Set objHTML = Nothing
  54. End Function
  55. Function ConvertTextFormat(text)
  56.     Dim converted
  57.     converted = Replace(text, vbCrLf, vbLf)     ' 先将CRLF转为LF
  58.     converted = Replace(converted, vbCr, vbLf)  ' 将CR转为LF
  59.     converted = Replace(converted, vbLf, vbCrLf) ' 最后将所有LF转为CRLF
  60.     If Len(converted) >= 3 Then
  61.         If AscB(MidB(converted, 1, 1)) = &HEF And _
  62.            AscB(MidB(converted, 2, 1)) = &HBB And _
  63.            AscB(MidB(converted, 3, 1)) = &HBF Then
  64.             converted = Mid(converted, 2) ' 跳过BOM
  65.         End If
  66.     End If
  67.     ConvertTextFormat = converted
  68. End Function
  69. Function ShowSaveDialog()
  70.     Dim objShell, objFolder, tempPath, fileName
  71.     Set objShell = CreateObject("WScript.Shell")
  72.     fileName = "clipboard_content_" & FormatDateTime(Now, 2) & "_" & Replace(FormatDateTime(Now, 4), ":", "") & ".txt"
  73.     Dim filePath
  74.     filePath = InputBox("请输入要保存的文件路径:" & vbCrLf & vbCrLf & _
  75.                        "支持的文件格式:.txt, .log, .csv, .ini, .xml等", _
  76.                        "保存剪贴板内容", _
  77.                        objShell.ExpandEnvironmentStrings("%USERPROFILE%\Desktop") & fileName)
  78.     If filePath = "" Then
  79.         ShowSaveDialog = ""
  80.         Exit Function
  81.     End If
  82.     Dim objFSO
  83.     Set objFSO = CreateObject("Scripting.FileSystemObject")
  84.     If InStr(objFSO.GetFileName(filePath), ".") = 0 Then
  85.         filePath = filePath & ".txt"
  86.     End If
  87.     ShowSaveDialog = filePath
  88.     Set objFSO = Nothing
  89.     Set objShell = Nothing
  90. End Function
  91. Function SaveTextToFile(text, filePath)
  92.     On Error Resume Next
  93.     Dim objStream, objFSO
  94.     Set objFSO = CreateObject("Scripting.FileSystemObject")
  95.     Dim folderPath
  96.     folderPath = objFSO.GetParentFolderName(filePath)
  97.     If Not objFSO.FolderExists(folderPath) Then
  98.         objFSO.CreateFolder folderPath
  99.     End If
  100.     Set objStream = CreateObject("ADODB.Stream")
  101.     objStream.Type = 2 ' 文本类型
  102.     objStream.Charset = "gb2312" ' 使用GB2312编码(ANSI中文环境)
  103.     objStream.Open
  104.     objStream.WriteText text
  105.     objStream.SaveToFile filePath, 2 ' 2 = 覆盖已存在文件
  106.     objStream.Close
  107.     If Err.Number = 0 Then
  108.         SaveTextToFile = True
  109.     Else
  110.         SaveTextToFile = False
  111.     End If
  112.     Set objStream = Nothing
  113.     Set objFSO = Nothing
  114. End Function
  115. Main
复制代码


剪贴板输出文字.rar (1.5 KB, 下载次数: 6)

点评

感谢分享!  发表于 昨天 16:04
2#
发表于 昨天 15:47 | 只看该作者
有记得有很多这种剪切板管理工具的,没必要重复造轮子...


二○二五年十月二十七日

点评

它们回来都是utf-8且LF换行符,没有这个修改格式能力。  详情 回复 发表于 昨天 16:08
回复

使用道具 举报

3#
发表于 昨天 15:55 | 只看该作者
感谢分享!
回复

使用道具 举报

4#
发表于 昨天 16:00 | 只看该作者
下来试一试 谢谢
回复

使用道具 举报

5#
发表于 昨天 16:03 | 只看该作者
10 PE 使用不了


回复

使用道具 举报

6#
发表于 昨天 16:07 | 只看该作者
看起来不错,暂时用不上,留给需要的人
回复

使用道具 举报

7#
发表于 昨天 16:07 | 只看该作者
支持原创
回复

使用道具 举报

8#
 楼主| 发表于 昨天 16:08 | 只看该作者
邪恶海盗 发表于 2025-10-27 15:47
有记得有很多这种剪切板管理工具的,没必要重复造轮子...

它们回来都是utf-8且LF换行符,没有这个修改格式能力。
回复

使用道具 举报

9#
发表于 昨天 16:10 | 只看该作者
那天问ai,加上这个就能输出ANSI
Set stream = CreateObject("ADODB.Stream")
stream.Type = 2
stream.Charset = "gb2312"
stream.Open
回复

使用道具 举报

10#
发表于 昨天 16:20 | 只看该作者
感谢分享
回复

使用道具 举报

11#
发表于 昨天 16:42 | 只看该作者
感谢分享!
回复

使用道具 举报

12#
发表于 昨天 17:21 | 只看该作者
感谢分享
回复

使用道具 举报

13#
发表于 昨天 19:43 | 只看该作者
感谢楼主分享!
回复

使用道具 举报

14#
发表于 昨天 20:17 | 只看该作者
感谢分享
回复

使用道具 举报

15#
发表于 昨天 21:32 | 只看该作者
本帖最后由 likeyouli 于 2025-10-27 21:37 编辑

这个我前段时间刚研究过,http://bbs.wuyou.net/forum.php?mod=viewthread&tid=447416  见2楼,主要是这段代码,vba通过调用ps生成的:Set oShell = CreateObject("WScript.Shell")
    psCommand = "powershell -Command " & """$bytes = [System.Text.Encoding]::UTF8.GetBytes('" & strText & "'); " & _
                "$stream = [System.IO.File]::Create('" & filepath1 & "'); " & "$stream.Write($bytes, 0, $bytes.Length); " & "$stream.Close()"""
    oShell.Run psCommand, 1, True
    Set oShell = Nothing
我是通过vba,要求输出的必须是utf-8(不带BOM)  ,  默认好像是输出的要么是ansi,要么是utf-8带BOM


回复

使用道具 举报

16#
 楼主| 发表于 昨天 22:27 来自手机 | 只看该作者
本帖最后由 窄口牛 于 2025-10-27 22:30 编辑

我研究不了,都来自深索。感觉现在深索进化了不少,出错率低了,在写vbs脚本方面。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-10-28 06:37

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表