无忧启动论坛
标题:
win7下剪贴板保存为自定格式文本
[打印本页]
作者:
窄口牛
时间:
前天 15:14
标题:
win7下剪贴板保存为自定格式文本
找ai写了个脚本,复制回来是utf8格式,unix(LF)换行符,是不是很不方便?
我这个就是解决这个问题
Option Explicit
Sub Main()
On Error Resume Next
Dim clipboardText
clipboardText = GetClipboardText()
If IsEmpty(clipboardText) Then
MsgBox "剪贴板中没有文本内容或无法访问剪贴板!", vbExclamation, "错误"
Exit Sub
End If
If clipboardText = "" Then
MsgBox "剪贴板中没有文本内容!", vbExclamation, "错误"
Exit Sub
End If
Dim convertedText
convertedText = ConvertTextFormat(clipboardText)
Dim filePath
filePath = ShowSaveDialog()
If filePath = "" Then
Exit Sub
End If
If SaveTextToFile(convertedText, filePath) Then
MsgBox "文件保存成功!" & vbCrLf & "路径:" & filePath, vbInformation, "成功"
Else
MsgBox "文件保存失败!", vbExclamation, "错误"
End If
End Sub
Function GetClipboardText()
On Error Resume Next
Dim objHTML, clipboardText
Set objHTML = CreateObject("htmlfile")
clipboardText = objHTML.ParentWindow.ClipboardData.GetData("text")
If Err.Number <> 0 Then
Err.Clear
Dim objShell
Set objShell = CreateObject("WScript.Shell")
Dim tempFile, objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
tempFile = objFSO.GetSpecialFolder(2) & "\clipboard_temp.txt"
objShell.Run "powershell -Command Get-Clipboard | Out-File -FilePath """ & tempFile & """ -Encoding UTF8", 0, True
WScript.Sleep 500 ' 等待文件写入
If objFSO.FileExists(tempFile) Then
Dim objStream
Set objStream = CreateObject("ADODB.Stream")
objStream.Charset = "UTF-8"
objStream.Open
objStream.LoadFromFile tempFile
clipboardText = objStream.ReadText
objStream.Close
objFSO.DeleteFile tempFile, True
End If
End If
GetClipboardText = clipboardText
Set objHTML = Nothing
End Function
Function ConvertTextFormat(text)
Dim converted
converted = Replace(text, vbCrLf, vbLf) ' 先将CRLF转为LF
converted = Replace(converted, vbCr, vbLf) ' 将CR转为LF
converted = Replace(converted, vbLf, vbCrLf) ' 最后将所有LF转为CRLF
If Len(converted) >= 3 Then
If AscB(MidB(converted, 1, 1)) = &HEF And _
AscB(MidB(converted, 2, 1)) = &HBB And _
AscB(MidB(converted, 3, 1)) = &HBF Then
converted = Mid(converted, 2) ' 跳过BOM
End If
End If
ConvertTextFormat = converted
End Function
Function ShowSaveDialog()
Dim objShell, objFolder, tempPath, fileName
Set objShell = CreateObject("WScript.Shell")
fileName = "clipboard_content_" & FormatDateTime(Now, 2) & "_" & Replace(FormatDateTime(Now, 4), ":", "") & ".txt"
Dim filePath
filePath = InputBox("请输入要保存的文件路径:" & vbCrLf & vbCrLf & _
"支持的文件格式:.txt, .log, .csv, .ini, .xml等", _
"保存剪贴板内容", _
objShell.ExpandEnvironmentStrings("%USERPROFILE%\Desktop") & fileName)
If filePath = "" Then
ShowSaveDialog = ""
Exit Function
End If
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
If InStr(objFSO.GetFileName(filePath), ".") = 0 Then
filePath = filePath & ".txt"
End If
ShowSaveDialog = filePath
Set objFSO = Nothing
Set objShell = Nothing
End Function
Function SaveTextToFile(text, filePath)
On Error Resume Next
Dim objStream, objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim folderPath
folderPath = objFSO.GetParentFolderName(filePath)
If Not objFSO.FolderExists(folderPath) Then
objFSO.CreateFolder folderPath
End If
Set objStream = CreateObject("ADODB.Stream")
objStream.Type = 2 ' 文本类型
objStream.Charset = "gb2312" ' 使用GB2312编码(ANSI中文环境)
objStream.Open
objStream.WriteText text
objStream.SaveToFile filePath, 2 ' 2 = 覆盖已存在文件
objStream.Close
If Err.Number = 0 Then
SaveTextToFile = True
Else
SaveTextToFile = False
End If
Set objStream = Nothing
Set objFSO = Nothing
End Function
Main
复制代码
剪贴板输出文字.rar
(1.5 KB, 下载次数: 6)
前天 15:14
上传
点击文件名下载附件
下载积分: 无忧币 -2
作者:
邪恶海盗
时间:
前天 15:47
有记得有很多这种剪切板管理工具的,没必要重复造轮子...
二○二五年十月二十七日
作者:
it323
时间:
前天 15:55
感谢分享!
作者:
yyz2191958
时间:
前天 16:00
下来试一试 谢谢
作者:
yyz2191958
时间:
前天 16:03
10 PE 使用不了
1.png
(12.54 KB, 下载次数: 5)
下载附件
前天 16:03
上传
作者:
a66
时间:
前天 16:07
看起来不错,暂时用不上,留给需要的人
作者:
wn168cn@163.com
时间:
前天 16:07
支持原创
作者:
窄口牛
时间:
前天 16:08
邪恶海盗 发表于 2025-10-27 15:47
有记得有很多这种剪切板管理工具的,没必要重复造轮子...
它们回来都是utf-8且LF换行符,没有这个修改格式能力。
作者:
pole87898843
时间:
前天 16:10
那天问ai,加上这个就能输出ANSI
Set stream = CreateObject("ADODB.Stream")
stream.Type = 2
stream.Charset = "gb2312"
stream.Open
作者:
sdb5168
时间:
前天 16:20
感谢分享
作者:
ebaqiang
时间:
前天 16:42
感谢分享!
作者:
seeimpact153
时间:
前天 17:21
感谢分享
作者:
afti
时间:
前天 19:43
感谢楼主分享!
作者:
小灰兔
时间:
前天 20:17
感谢分享
作者:
likeyouli
时间:
前天 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
作者:
窄口牛
时间:
前天 22:27
本帖最后由 窄口牛 于 2025-10-27 22:30 编辑
我研究不了,都来自深索。感觉现在深索进化了不少,出错率低了,在写vbs脚本方面。
作者:
wang1126
时间:
昨天 09:00
谢谢楼主分享
作者:
路路路过
时间:
昨天 09:29
感谢大佬分享
作者:
fegr
时间:
昨天 14:22
谢谢分享
作者:
xpzzj
时间:
昨天 15:26
多谢分享!
作者:
fd8526547
时间:
昨天 21:29
感谢分享!
欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/)
Powered by Discuz! X3.3