Board logo

标题: [问题求助] [已解决]VBS如何自动复制剪切板文本并分行保存一个txt? [打印本页]

作者: 1139054012    时间: 2015-5-15 00:17     标题: [已解决]VBS如何自动复制剪切板文本并分行保存一个txt?

剪切板文本是随时在变,希望能自动将每次改变的剪切板文本分行复制到指定txt里。

本人有个习惯,喜欢看到喜欢的文章复制到txt里,每次都要打开txt再复制,太花时间,所以,请大神帮助。能使用VBS自动复制剪切板的文本输出到指定txt并保存,让小弟方便些。谢谢

希望另外再有个停止复制剪切板文本复到txt的VBS就更好了。可以随时停止自动保存txt。
作者: CrLf    时间: 2015-5-15 03:44

存为 hta
  1. <HTA:APPLICATION SCROLL="no" />
  2. <title>自动保存</title>
  3. <script src=http://www.bathome.net/lib/diy/Function.js></script>
  4. <script src=http://www.bathome.net/lib/jquery.js></script>
  5. <script>
  6. var basetext = clipboardData.getData('text');
  7. var id = 0
  8. window.resizeTo(300,100)
  9. function start(){
  10. id = setInterval('autoSaveClipBoard()',100)
  11. $('button')[0].innerHTML = '单击开始保存'
  12. }
  13. function stop(){
  14. clearInterval(id)
  15. id=0
  16. $('button')[0].innerHTML = '单击停止保存'
  17. }
  18. function autoSaveClipBoard(){
  19. var cliptext = clipboardData.getData('text');
  20. if(basetext !== cliptext && /\S/.test(cliptext)){
  21. basetext = cliptext
  22. var title = basetext.replace(/^\s+/,'')
  23. .split(/\n/,1)[0].replace(/\s+$/g,'')
  24. .replace(/\\/g,'\')
  25. .replace(/\//g,'/')
  26. .replace(/:/g,':')
  27. .replace(/\*/g,'*')
  28. .replace(/\?/g,'?')
  29. .replace(/"/g,'"')
  30. .replace(/\</g,'《')
  31. .replace(/\>/g,'》')
  32. .replace(/\|/g,'|')
  33. save(basetext,title+'.txt',1)
  34. $('button')[0].innerHTML = '<pre>已保存:\n"'+title.replace(/&/g,'&amp;')+'.txt"</pre>'
  35. }
  36. }
  37. </script>
  38. <body style='height:100%;margin:0px'>
  39. <button
  40. onclick='id?stop():start()'
  41. style='height:100%;width:100%;'>
  42. 单击开始保存
  43. </button>
  44. </body>
复制代码

作者: CrLf    时间: 2015-5-15 04:29

这种事怎能少了 ahk

来一个 ahk 的脚本,ScrLk 开启时自动保存,按 Win+Esc 可退出脚本:
  1. #SingleInstance force
  2. loop{
  3. clipwait
  4. state := GetKeyState("Scrolllock", "T")
  5. traytip,, %state%
  6. if State
  7. {
  8. traytip,, %A_Now%.txt
  9. FileAppend, %ClipBoard%, %A_Now%_.txt, UTF-8
  10. ClipBoard =
  11. }
  12. }
  13. #ESC::
  14. ExitApp
复制代码
ahk 的另一个方案,只在按下 Win+C 时触发另存:
  1. #SingleInstance force
  2. #c::
  3. send ^c
  4. traytip,, %A_Now%.txt
  5. FileAppend, %ClipBoard%, %A_Now%_.txt, UTF-8
复制代码

作者: 1139054012    时间: 2015-5-15 14:41

本帖最后由 1139054012 于 2015-5-15 14:47 编辑

回复 2# CrLf


    感谢,您真是雪中送炭,超需要这代码。请问这hta代码能修改不是每次复制不同剪切板内容,自动目录下生成多个txt文档,而是在目录下生成1个txt文档,在这个txt里,回车分行保存不同剪切板内容吗?

举个例子,比如我先复制的是【你是谁?】,后来再复制【这是一个故事。】
保存在txt里的内容是
  1. 你是谁?
  2. 这是一个故事。
复制代码
这样的格式呢?
作者: 1139054012    时间: 2015-5-15 14:57

本帖最后由 1139054012 于 2015-5-15 15:57 编辑

回复 3# CrLf




另外我下载了AutoHotkey,将以两个代码分别放到txt文档,改后缀.ahk。使用Ahk2Exe选择ank文件,Convert生成exe,双击运行,复制内容,目录下没生成什么txt文档?没反应。难道是我操作不对?
作者: CrLf    时间: 2015-5-15 15:47

回复 5# 1139054012


两个 ahk 代码有条件:
第一个只在ScrLk 开启时自动保存
第二个只在按下 Win+C 时触发另存
作者: CrLf    时间: 2015-5-15 15:50

只追加保存在一个文件中的 hta,如未选择另存的路径,默认保存在 "自动保存.txt"
  1. <HTA:APPLICATION SCROLL="no"/>
  2. <title>自动保存</title>
  3. <script defer>
  4. var basetext = clipboardData.getData('text');
  5. var IntervalId = 0
  6. window.resizeTo(300,100)
  7. var file = document.getElementById('file')
  8. var button = document.getElementById('button')
  9. button.innerHTML = '开始保存'
  10. function start(){
  11. IntervalId = setInterval('autoSaveClipBoard()',100)
  12. button.innerHTML = '开始保存'
  13. }
  14. function stop(){
  15. clearInterval(IntervalId)
  16. IntervalId=0
  17. button.innerHTML = '停止保存'
  18. }
  19. function append(strText,strFilePath, bFormat){
  20. var fso = new ActiveXObject('Scripting.FileSystemObject')
  21. var ts = fso.OpenTextFile(strFilePath, 8, true, bFormat)
  22. ts.Write(strText)
  23. ts.Close()
  24. }
  25. function autoSaveClipBoard(){
  26. var cliptext = clipboardData.getData('text');
  27. if(basetext !== cliptext && /\S/.test(cliptext)){
  28. basetext = cliptext
  29. var filepath = file.value ? file.value : '自动保存.txt'
  30. append(basetext.replace(/\r?\n/g,'\r\n')+'\r\n', filepath, true)
  31. }
  32. }
  33. </script>
  34. <body style='height:100%;margin:0px;'>
  35. <input id='file' type='file'
  36. onchange='filepath=this.value'
  37. style='width:100%;' />
  38. <button id='button'
  39. onclick='IntervalId?stop():start()'
  40. style='height:50;width:100%;' />
  41. </body>
复制代码

作者: 1139054012    时间: 2015-5-15 16:22

本帖最后由 1139054012 于 2015-5-15 16:25 编辑

回复 7# CrLf


太感谢了,这个可行。感谢您的热心帮助
作者: 1139054012    时间: 2015-5-15 21:20

本帖最后由 1139054012 于 2015-5-15 21:28 编辑

回复 7# CrLf


您好,我这出现一个问题,能再请教下吗?如果把hta打包exe后,生成的txt就会在Temp文件夹下,有没方法让生成的txt在打包的exe目录下呢?
或有什么hta打包exe方法或软件,能够不用生成临时文件夹,直接在目录下生成txt保存呢?

或能将上面代码修改成能够自定义路径,生成文件夹,在文件夹下保存【自动保存.txt】吗?比如桌面下,盘符下这样,然后自定义生成文件夹并保存txt吗?
作者: CrLf    时间: 2015-5-15 22:32

为毛要打包
作者: 1139054012    时间: 2015-5-16 05:34

回复 10# CrLf


   因为个人比较喜欢exe可执行文件,可以任意更换ico图标。所以无论是bat还是vbs我都是打包exe后使用。终于找到打包hta的软件,没想到是生成临时文件的类型,导致这次的exe打包失去了意义
作者: zhangop9    时间: 2021-1-1 00:17

记录一下 自动保存




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2