Board logo

标题: [文件操作] 批处理能监控剪贴板吗?当剪贴板的内容存在特定字符串则执行指定操作或程序 [打印本页]

作者: hentai87    时间: 2016-7-21 08:45     标题: 批处理能监控剪贴板吗?当剪贴板的内容存在特定字符串则执行指定操作或程序

本帖最后由 pcl_test 于 2016-7-21 13:43 编辑

比如复制了123,剪贴板改变了,执行1.bat,1bat来判断剪贴板内容=123就把123改成321
复制了32643736930,剪贴板改变了,执行1.bat,1bat来判断剪贴板内容=11位数字,就在11位数字前面加www.xxxx.
等等
要是能实现,应用范围就很广了,用途很大
我搜不到类似的内容,找不到办法
作者: pcl_test    时间: 2016-7-21 09:11

“判断剪贴板内容=123就把123改成321” 什么规律,只是判断123一个数字?
作者: hentai87    时间: 2016-7-21 09:14

回复 2# pcl_test


第一个例子是判断固定字符
第二个例子是判断固定位数的数字
不过问题的关键是监控剪贴板,监控不了的话,判断也没用。。
作者: hentai87    时间: 2016-7-21 09:59

  1. mshta "javascript:var s=clipboardData.getData('text');if(s)new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(s);close();"|more >temp1.txt
  2. ping 127.0.0.1 -n 3
  3. mshta "javascript:var s=clipboardData.getData('text');if(s)new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(s);close();"|more >temp2.txt
  4. :对比temp1.txt和temp2.txt
  5. !@#!@¥%%……&&
  6. del temp1.txt
  7. xcopy temp2.txt temp1.txt
  8. del temp2.txt
复制代码
啊,这样感觉效率还不如直接一直不断判断剪贴板呢
作者: pcl_test    时间: 2016-7-21 10:04

保存为hta文件,运行后当复制了符合条件的数据,直接粘贴即可
  1. <script>
  2. window.resizeTo(180,80);
  3. var str = '123';
  4. var prefix = 'www.xxxx.';
  5. function getclip(){
  6.     try{
  7.         var cliptxt = clipboardData.getData('text').replace(/^[ \s]*|[ \s]*$/, '');
  8.         if(cliptxt==str){
  9.         clipboardData.setData('text', '321');
  10.         } else if(/^\d{11}$/.test(cliptxt))clipboardData.setData('text', prefix + cliptxt);
  11.     }catch(e){}
  12.     setTimeout('getclip()', 500);
  13. }
  14. </script>
  15. <body style='text-align:center' onload='getclip()'>剪贴板监控中</body>
复制代码

作者: hentai87    时间: 2016-7-21 10:11

本帖最后由 hentai87 于 2016-7-21 10:13 编辑

回复 5# pcl_test


能用bat吗,看不懂,321写在哪个语句了- -
作者: tmplinshi    时间: 2016-7-21 15:04

本帖最后由 tmplinshi 于 2016-7-21 15:15 编辑

去下载安装一个 AutoHotkey
  1. #NoEnv
  2. #Persistent
  3. return
  4. OnClipboardChange:
  5. if (A_EventInfo != 1) { ; 剪贴板数据的类型不是字符则返回
  6. return
  7. }
  8. if (Clipboard = "123") {
  9. Clipboard := "321"
  10. } else if RegExMatch(Clipboard, "^\d{11}$") {
  11. Clipboard := "www.xxxx." Clipboard
  12. }
  13. return
复制代码

作者: GNU    时间: 2016-7-21 15:28

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set PSCMD=powershell -c "Add-Type -AssemblyName PresentationCore; [Windows.Clipboard]::GetText()"
  4. :CheckClip
  5. for /f "delims=" %%i in ('%PSCMD%') do (
  6.     set "strClip=%%i"
  7. )
  8. if "!strClip!" equ "123" (
  9.     echo 321
  10.     pause
  11.     goto :eof
  12. )
  13. timeout /nobreak /t 3 >nul
  14. goto :CheckClip
复制代码

作者: hentai87    时间: 2016-7-21 15:43

回复 8# GNU


结果能直接输出到剪贴板吗,最好是一直循环,而不是一次就结束
作者: pcl_test    时间: 2016-7-21 15:58

回复 6# hentai87


    5L已改
作者: hentai87    时间: 2016-7-21 16:42

本帖最后由 pcl_test 于 2016-7-21 17:03 编辑

回复 10# pcl_test


懂了,但是我昨天帖子那2个列子怎么改,有点不一样,有多行,经验不够多,不是几乎相似的不会举一反三
http://www.bathome.net/viewthrea ... mp;extra=#pid187992
作者: pcl_test    时间: 2016-7-21 17:26

本帖最后由 pcl_test 于 2016-7-21 17:28 编辑

完善下8L的powershell代码
  1. while(1)
  2. {
  3.     $str = [Windows.Clipboard]::GetText()
  4.     if($str -eq "123")
  5.     {
  6.         [Windows.Clipboard]::SetText("321")
  7.     } else {
  8.         if($str -match "^\d{11}$"){[Windows.Clipboard]::SetText("www.xxxx."+$str)}
  9.     }
  10.     Start-Sleep -Seconds 1
  11. }
复制代码

作者: hentai87    时间: 2016-7-22 08:08

回复 12# pcl_test


    11楼的怎么弄- -
作者: hentai87    时间: 2016-7-22 08:55

回复 12# pcl_test


    这个代码写在8楼的哪个位置?-  -




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