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

[问题求助] VBS随机读取单数行,并让读到的单数行加1,输出这2行到剪贴板

[复制链接]
发表于 2014-4-15 09:22:15 | 显示全部楼层 |阅读模式
本帖最后由 我来了 于 2014-4-15 22:14 编辑
I have not failed. I’ve just found 10,000 ways that won’t work. – Thomas Edison
我并没有失败。我只是找到了1万个不成功的方法。——托马斯·爱迪生

Failure defeats losers, failure inspires winners. – Robert T. Kiyosaki
失败可以打击输家,也可以启发赢家。——罗伯特·T·清崎

Some people dream of great accomplishments, while others stay awake and do them. – Anonymous
有人梦想伟大的成就,但有人一直清清楚楚地在做。——无名氏

I cannot give you the formula for success, but I can give you the formula for failure, which is: Try to please everybody. - Herbert B. Swope
我不能给你成功的计算公式,但我可以给你失败的计算公式,那就是:试着取悦每个人。——赫伯特·B·斯沃普
If you have always done it that way, it is probably wrong. - Charles Kettering
如果你一直用这种方法做事,那它很可能是错误的。——查尔斯·凯特宁
Being different is one of the most beautiful things on earth. - Anonymous
与众不同是世界上最美好的事情之一。——无名氏
Creativity is intelligence having fun. – Albert Einsten
创造力是智力的乐趣。——艾尔伯特·爱因斯坦

randomize
set fso = CreateObject("Scripting.Filesystemobject")
set a = CreateObject("Scripting.Dictionary")
set file = fso.OpenTextFile("D:\OperaZ_Y\英语谚语.txt")
do until file.AtendofStream
   m = m + 1
   a.add m,file.readline
loop
file.close
h=int(rnd * m + 1)
if h = m then h = m - 1
if h = 1 then h = 2
for i = h-1 to h
   str = str & a(i) & vbCrLf
Next
'msgbox str
CreateObject("WScript.Shell").Run "G:\PowerPro_4.9n7\配置文件夹\nircmd.exe clipboard set "&chr(34)&str&chr(34)
WScript.Sleep 1000
Set WshShell= WScript.CreateObject("WScript.Shell")
WshShell.SendKeys "^v"
WshShell.SendKeys "^{ENTER}"


配对! 我也不知如何表达,叠加一起大家应该懂了吧
就是一次读取  2行,并且这两行表达的的一个英语谚语~~

必须:

1,随机读取到的是单数行,
2,并外加它的下一行到剪贴板)

永远是形如:AAA+BBB,或CCC+DDD,
而不是BBB+CCC,就是文搭义(所在行跟所配的英文是对搭的~~)
AAA
BBB
CCC
DDD

发表于 2014-4-15 13:35:07 | 显示全部楼层
vbs:
  1. Randomize()
  2. For i=1 To 2
  3.         r = Rnd*a.count\1
  4.         msgbox ((a.Items())(r))
  5.         a.Remove(r)
  6. Next
复制代码
话说 js 操作数组元素或者对象属性比起 vbs 方便得多...

我更喜欢用 gnu,不过 sort 的 -R 选项得看版本:
  1. gnu_sort -R "D:\OperaZ_Y\英语谚语.txt" | sed "1,2!d"
复制代码
powershell 也是很好的选择,尽管它的设计用途并不是处理文本:
  1. get-content "D:\OperaZ_Y\英语谚语.txt" | get-random -count 2
复制代码
 楼主| 发表于 2014-4-15 14:58:52 | 显示全部楼层
本帖最后由 我来了 于 2014-4-15 15:08 编辑

回复 2# CrLf


    师兄,俺比较瓜,麻烦您给我组合到我上边的VBS里边去,多谢。
唉。。。实在搞这方面大菜瓜一个~~
那样,我就能用opera中定义的ctrl+shift+v直接使用了


PowerShell的确实是省事,可我不知如何弄成脚本到opera中调用啊。那个更一窍不通啊~~
 楼主| 发表于 2014-4-15 15:13:41 | 显示全部楼层
我要把PowerShell编译成exe就更费劲了,还得要.net环境,
就不能在PE环境下使用了,还是VBS的生存能力好一些
当然思路好是好的
发表于 2014-4-15 15:40:32 | 显示全部楼层
噢,发现理解错了....................
发表于 2014-4-15 16:44:41 | 显示全部楼层
本帖最后由 CrLf 于 2014-4-15 17:49 编辑

那更简单了:
  1. randomize
  2. set fso = CreateObject("Scripting.Filesystemobject")
  3. set file = fso.OpenTextFile("英语谚语.txt")
  4. text = file.ReadAll
  5. a = Split(text,vbCrLf)
  6. file.Close

  7. h = (rnd*UBound(a)\2)*2
  8. str = a(h) & vbCrLf & a(h+1)

  9. 'msgbox str
  10. setClip str
  11. Set WshShell= WScript.CreateObject("WScript.Shell")
  12. WshShell.SendKeys "^v"
  13. WshShell.SendKeys "^{ENTER}"

  14. Sub setClip(str)
  15.         Dim Form, TextBox
  16.         Set Form = CreateObject("Forms.Form.1")
  17.         Set TextBox = Form.Controls.Add("Forms.TextBox.1").Object
  18.         TextBox.MultiLine = True
  19.         TextBox.Text = str
  20.         TextBox.SelStart = 0
  21.         TextBox.SelLength = TextBox.TextLength
  22.         TextBox.Copy
  23. End Sub
复制代码
setClip 修改自 demon 的博客里的内容,这样就不需要第三方支持了(如果 com 可以不算的话)
发表于 2014-4-15 16:48:14 | 显示全部楼层
话说 opera 不能用 userscript 操作 dom 吗?还要这么复制粘贴
 楼主| 发表于 2014-4-15 17:41:45 | 显示全部楼层
回复 6# CrLf


    为什么  我运行 就这个样子呢?

难道是因为setClip 这东东,俺没有?欺负我是外村的?
发表于 2014-4-15 17:50:28 | 显示全部楼层
回复 8# 我来了


    多写了个 r,已修改。
    setClip 是 vbs 脚本里写的过程,不是外部命令
 楼主| 发表于 2014-4-15 17:51:20 | 显示全部楼层
回复 7# CrLf


    你的PowerShell搞的很精干,赞一个,nice

我的WIN X64 企业版运行很好,搜索了下可以编译成.exe文件(从CSDN下载一个批量编译的,发现运行报错,网上有资料说,又好像编译不了,外行,我也看迷糊了)
那要是再加上
ctrl+v,ctrl+enter呢?


=============================
另外,我就是这么使用的

=================
大哥哥,你看能不能给整合到这里面
 楼主| 发表于 2014-4-15 17:55:00 | 显示全部楼层
新版本 还是欺负我啊
发表于 2014-4-15 17:57:07 | 显示全部楼层
回复 10# 我来了


    原来以为是随机提取两行,你的意思不是随机提取相邻的中英文各一行吗?
发表于 2014-4-15 18:00:00 | 显示全部楼层
回复 11# 我来了


    WIN X64 企业版没有 Forms.Form.1 ?那你还是用 nircmd 吧,或者学一下 au3/autohotkey,实现这个既精确又简单
 楼主| 发表于 2014-4-15 18:07:30 | 显示全部楼层
回复 12# CrLf


我最早的意思是那样的,但那样做后,发现有问题
因为给出的英文翻译 和 中文的意思错位了
比如,读到了,第(偶数行)跟它的下一行,这样内容就造成了文不对题
所以,请大神出山弄个进化版
所以,你没发现,我最上面的贴子故意弄成了多色的

能不能生成随机数的种子,只读到奇数行,完事再相邻下一行的?

AHK的,AU3,的就不考虑了,因为又要再占一个软件上阵,
按键精灵的本来是弄出来了,改改就能运行,考虑到在opera中,所以就想只要一个VBS在原有代码上实现,原来有点复杂啊~~
再次感谢~~
 楼主| 发表于 2014-4-15 18:11:42 | 显示全部楼层
正确的输出结果是:
1,当在 opera浏览器的论坛回贴框中 ,按下定义的热键ctrl+shift+v时
2,粘贴提交的
正确的内容是
If you have always done it that way, it is probably wrong. - Charles Kettering
如果你一直用这种方法做事,那它很可能是错误的。——查尔斯·凯特宁

====================
而不是
与众不同是世界上最美好的事情之一。——无名氏
Creativity is intelligence having fun. – Albert Einsten

也许这个操作要求有点蛋痛,全怪楼主不好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 18:19 , Processed in 0.031078 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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