找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27151|回复: 11

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

[复制链接]
发表于 2015-5-15 00:17:08 | 显示全部楼层 |阅读模式
剪切板文本是随时在变,希望能自动将每次改变的剪切板文本分行复制到指定txt里。

本人有个习惯,喜欢看到喜欢的文章复制到txt里,每次都要打开txt再复制,太花时间,所以,请大神帮助。能使用VBS自动复制剪切板的文本输出到指定txt并保存,让小弟方便些。谢谢
​
希望另外再有个停止复制剪切板文本复到txt的VBS就更好了。可以随时停止自动保存txt。
发表于 2015-5-15 03:44:21 | 显示全部楼层
存为 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>
复制代码
发表于 2015-5-15 04:29:11 | 显示全部楼层
这种事怎能少了 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
复制代码
 楼主| 发表于 2015-5-15 14:41:58 | 显示全部楼层
本帖最后由 1139054012 于 2015-5-15 14:47 编辑

回复 2# CrLf


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

举个例子,比如我先复制的是【你是谁?】,后来再复制【这是一个故事。】
保存在txt里的内容是
  1. 你是谁?
  2. 这是一个故事。
复制代码
这样的格式呢?
 楼主| 发表于 2015-5-15 14:57:13 | 显示全部楼层
本帖最后由 1139054012 于 2015-5-15 15:57 编辑

回复 3# CrLf




另外我下载了AutoHotkey,将以两个代码分别放到txt文档,改后缀.ahk。使用Ahk2Exe选择ank文件,Convert生成exe,双击运行,复制内容,目录下没生成什么txt文档?没反应。难道是我操作不对?
发表于 2015-5-15 15:47:08 | 显示全部楼层
回复 5# 1139054012


两个 ahk 代码有条件:
第一个只在ScrLk 开启时自动保存
第二个只在按下 Win+C 时触发另存
发表于 2015-5-15 15:50:46 | 显示全部楼层
只追加保存在一个文件中的 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>
复制代码

评分

参与人数 1技术 +1 收起 理由
1139054012 + 1 很有帮助

查看全部评分

 楼主| 发表于 2015-5-15 16:22:47 | 显示全部楼层
本帖最后由 1139054012 于 2015-5-15 16:25 编辑

回复 7# CrLf


太感谢了,这个可行。感谢您的热心帮助
 楼主| 发表于 2015-5-15 21:20:32 | 显示全部楼层
本帖最后由 1139054012 于 2015-5-15 21:28 编辑

回复 7# CrLf


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

或能将上面代码修改成能够自定义路径,生成文件夹,在文件夹下保存【自动保存.txt】吗?比如桌面下,盘符下这样,然后自定义生成文件夹并保存txt吗?
发表于 2015-5-15 22:32:25 | 显示全部楼层
为毛要打包
 楼主| 发表于 2015-5-16 05:34:52 | 显示全部楼层
回复 10# CrLf


   因为个人比较喜欢exe可执行文件,可以任意更换ico图标。所以无论是bat还是vbs我都是打包exe后使用。终于找到打包hta的软件,没想到是生成临时文件的类型,导致这次的exe打包失去了意义
发表于 2021-1-1 00:17:54 | 显示全部楼层
记录一下 自动保存
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 05:08 , Processed in 0.012214 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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