Board logo

标题: [文本处理] [已解决]批处理如何实现将指定txt文本里的前几行内容复制到剪贴板并从文本中删除 [打印本页]

作者: pengyou86    时间: 2014-1-25 14:44     标题: [已解决]批处理如何实现将指定txt文本里的前几行内容复制到剪贴板并从文本中删除

每次执行这个批处理
就把 1.txt 前48行内容复制到剪贴板 然后删除这前48行
复制到剪贴板内容格式不变 还是原来1.txt格式一样.一行一个排列
操作系统是XP
作者: weichenxiehou    时间: 2014-1-25 15:20

回复 1# pengyou86
哪48行内容?
作者: pengyou86    时间: 2014-1-25 15:22

回复 2# weichenxiehou


    1到48行
作者: pengyou86    时间: 2014-1-25 15:23

48行是这样算的从上到下
作者: pengyou86    时间: 2014-1-25 15:41

麻烦高手写一个批处理 谢谢
作者: weichenxiehou    时间: 2014-1-25 15:43

回复 4# pengyou86
  1. onigsed -n "1,48p" a.txt
复制代码

作者: weichenxiehou    时间: 2014-1-25 15:45

回复 5# pengyou86
如果不考虑空行和特殊字符:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (a.txt) do (
  3.   set/a n+=1
  4.   echo,%%a
  5.   if !n! equ 48 exit/b
  6. )
  7. pause
复制代码

作者: pengyou86    时间: 2014-1-25 15:47

回复 6# weichenxiehou


    测试不管用啊 我把txt文本内容上传到附近中
作者: pengyou86    时间: 2014-1-25 15:51

回复 7# weichenxiehou


    什么都不用考虑
作者: pengyou86    时间: 2014-1-25 15:54

回复 7# weichenxiehou


    文本我已经上传到附件了  我测试这个批处理不能使用
作者: pengyou86    时间: 2014-1-25 15:55

回复  pengyou86
如果不考虑空行和特殊字符:
weichenxiehou 发表于 2014-1-25 15:45





        文本我已经上传到附件了  我测试这个批处理不能使用
作者: weichenxiehou    时间: 2014-1-25 16:04

回复 11# pengyou86
真是要送到嘴边哟。。。把上面的a.txt改成1.txt嘛
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%a in (1.txt) do (
  3.   set/a n+=1
  4.   echo,%%a
  5.   if !n! equ 48 goto :end
  6. ))>result.txt
  7. :end
  8. start result.txt
复制代码

作者: weichenxiehou    时间: 2014-1-25 16:07

或者这样:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (1 1 48) do (set/p var=&echo,!var!)<1.txt
  3. pause
复制代码

作者: PowerShell    时间: 2014-1-25 16:08

powershell  代码:1 任意特殊字符无忧 2 a.txt任意大
  1. Get-Content  a.txt   -TotalCount 38 | Out-file b.txt
复制代码

作者: pengyou86    时间: 2014-1-25 16:12

回复  pengyou86
真是要送到嘴边哟。。。把上面的a.txt改成1.txt嘛
weichenxiehou 发表于 2014-1-25 16:04



    不好意思 可能我描述的不够详细
让批处理实现从1.txt文本剪切出48行内容。1.txt文本中去掉48行内容 然后把剪切去掉48行的内容保存到剪切板就可以了  无需另外保存到别的文本中
作者: weichenxiehou    时间: 2014-1-25 16:32

回复 15# pengyou86
说实话,用批处理操控剪切板还蛮麻烦的,遂用au3,本想编译成exe贴上来的,但是不能上传50K以上的文件。。。要用就qq联系我吧
  1. Local $line,$s
  2. For $i=1 To 48
  3.   $line=FileReadLine("1.txt",$i)
  4.   $s&=@CRLF & $line
  5. Next
  6. ClipPut($s)
复制代码

作者: pengyou86    时间: 2014-1-25 16:54

回复 16# weichenxiehou


    好的 我申请加你的QQ了
作者: Batcher    时间: 2014-1-25 17:01

回复 16# weichenxiehou


    Win7系统有clip命令
作者: weichenxiehou    时间: 2014-1-25 17:07

回复 18# Batcher
soga,我对批处理的探索和认识还停留在xp阶段。
作者: CrLf    时间: 2014-1-25 18:06

用 more 就好:
  1. @more +48 1.txt
复制代码

作者: pengyou86    时间: 2014-1-25 18:08

回复 20# CrLf


    麻烦写个完整的吧 我是个菜鸟  谢谢
作者: CrLf    时间: 2014-1-25 18:29

回复 21# pengyou86


有clip命令的话可以如此:
  1. @more +48 1.txt|clip
复制代码
xp可以如此(借鉴demon的vbs方案):
  1. @set @n=0;//&goto bat
  2. var Form = new ActiveXObject('Forms.Form.1')
  3. with(Form.Controls.Add("Forms.TextBox.1").Object)
  4. {
  5. MultiLine = true
  6. Text = WScript.StdIn.ReadAll()
  7. SelStart = 0
  8. SelLength = TextLength
  9. Copy()
  10. }
  11. /*
  12. :bat
  13. @more +48 1.txt|cscript -e:jscript %0
  14. pause
  15. :*/
复制代码

作者: CrLf    时间: 2014-1-25 18:40

来个ahk:
  1. text := ""
  2. Loop, Read, 1.txt
  3.    if (A_Index>48)
  4.       text := text A_LoopReadLine "`r`n"
  5. clipboard := text
  6. return
复制代码
au3 和 ahk 处理人机交互真给力
作者: simon4055    时间: 2014-1-25 20:43

这个好 mark一下 留着用.
学习了..
作者: terse    时间: 2014-1-25 20:49

本帖最后由 terse 于 2014-1-25 20:53 编辑

纯P 环境 WIN7
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%i in (1.txt) do set /an+=1&if !n! leq 48 echo %%i)>$
  3. clip<$
  4. >$ more +48 1.txt
  5. move $ 1.txt
  6. pause
复制代码
  1. @echo off&setlocal enabledelayedexpansion
  2. del $* 2>nul
  3. for /f "delims=" %%i in (1.txt) do set /an+=1&if !n! gtr 48 (>>$$ echo %%i)else >>$ echo %%i
  4. clip<$&move $$ 1.txt >nul&del $*
  5. pause
复制代码

作者: pengyou86    时间: 2014-1-25 21:50

谢谢上面各位高手测试没有一个能用的
作者: pengyou86    时间: 2014-1-25 21:53

麻烦高手再帮忙一下
作者: PowerShell    时间: 2014-1-25 22:01

1       14楼 ,我手误搞成38行了,抱歉.
2  [1.txt文本中去掉48行内容 然后把剪切去掉48行的内容保存到剪切板就可以了]    ----这句话如何理解?首先声明,我个人理解能力太差,但我认为你说的太渣!

这句话我理解为,把1.txt中从49行到文本文件末尾(1万多行)复制到剪贴板.但是原来楼主说的是把1---48行放入剪贴板,这是完全相反的,而且大家回的代码都是[取]1---48行,而不是[弃]!
作者: pengyou86    时间: 2014-1-25 22:10

1       14楼 ,我手误搞成38行了,抱歉.
2  [1.txt文本中去掉48行内容 然后把剪切去掉48行的内容保存到剪切 ...
PowerShell 发表于 2014-1-25 22:01



    对我的描述可能有问题 你说的对
作者: CrLf    时间: 2014-1-26 01:48

本帖最后由 CrLf 于 2014-1-26 02:39 编辑

是这意思吧:
  1. @set @n=0;//&goto bat
  2. var Form,i,str=''
  3. for(i=0;i<3;i++)str+=WSH.StdIn.ReadLine()+'\r\n'
  4. with(new ActiveXObject('Forms.Form.1').Controls.Add("Forms.TextBox.1").Object)
  5. {
  6.         MultiLine = true
  7.         Text = str
  8.         SelStart = 0
  9.         SelLength = TextLength
  10.         Copy()
  11. }
  12. WSH.Echo(WSH.StdIn.ReadAll())
  13. /*
  14. :bat
  15. @<1.txt cscript -nologo -e:jscript %0|sort /+9999|sort /+9999 /o 1.txt
  16. pause
  17. :*/
复制代码
要求有变动最好也能更新到顶楼
作者: pengyou86    时间: 2014-1-26 02:02

是这意思吧:要求有变动最好也能更新到顶楼
CrLf 发表于 2014-1-26 01:48




    这个批处理剪切出来的文本内容格式和1.txt不一样了.
正常格式如下
240046584106
240046584107
240046584108
240046584109
240046584110
240046584111
240046584112
240046584113
240046584114
240046584115
240046584116
240046584117
240046584118
240046584119
240046584120
240046584121
240046584122
按照以上格式排列就可以了  麻烦高手再修改一下
不好意思这么晚打扰你
作者: CrLf    时间: 2014-1-26 02:39

回复 32# pengyou86


    已修改
作者: pengyou86    时间: 2014-1-26 10:02

本帖最后由 pengyou86 于 2014-1-26 10:03 编辑
是这意思吧:要求有变动最好也能更新到顶楼
CrLf 发表于 2014-1-26 01:48


问题解决 配合我写的按键精灵脚本  可以很好的实现我所需的功能要求
还是批处理好比按键精灵速度要快些
作者: qzwqzw    时间: 2014-1-26 16:02

来的晚了些
匆匆浏览了一下
给我的感觉
就是一道挺鸡肋的题
楼主的出发点无法推测
把批处理用在这种场合下
只能表示无语

很多时候
我们所解决的问题
都是在解决老问题过程中产生的新问题
等到九绕十八弯终于解决了问题链时
我们才发现
最初的问题
原本可以有另外的
更为直接而简便的答案

建议楼主从头思索问题的起源
换个思路
也许很快就能找到
比按键精灵加批处理更加有效的解决方案
作者: pcl_test    时间: 2016-9-6 15:01

本帖最后由 pcl_test 于 2016-9-6 15:31 编辑
  1. //&cls&mshta "%~f0"|find /v ""&pause&exit
  2. <script>
  3. var fso = new ActiveXObject('Scripting.Filesystemobject');
  4. var txtfile = '文本.txt';
  5. var n = 48;
  6. var s = '';
  7. try{
  8.     var f = fso.OpenTextFile(txtfile, 1);
  9.     for(i=0;i<n;i++)s+=f.ReadLine()+'\r\n';
  10.     var text = f.ReadAll();
  11.     f.Close();
  12. }catch(e){}
  13. clipboardData.setData('text', s);
  14. fso.OpenTextFile(txtfile, 2).Write(text);
  15. close();
  16. </script>
复制代码





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