标题: [文本处理] [已解决]批处理如何实现将指定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 复制代码
作者: weichenxiehou 时间: 2014-1-25 15:45
回复 5# pengyou86
如果不考虑空行和特殊字符:- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in (a.txt) do (
- set/a n+=1
- echo,%%a
- if !n! equ 48 exit/b
- )
- 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嘛- @echo off&setlocal enabledelayedexpansion
- (for /f "delims=" %%a in (1.txt) do (
- set/a n+=1
- echo,%%a
- if !n! equ 48 goto :end
- ))>result.txt
- :end
- start result.txt
复制代码
作者: weichenxiehou 时间: 2014-1-25 16:07
或者这样:- @echo off&setlocal enabledelayedexpansion
- for /l %%a in (1 1 48) do (set/p var=&echo,!var!)<1.txt
- pause
复制代码
作者: PowerShell 时间: 2014-1-25 16:08
powershell 代码:1 任意特殊字符无忧 2 a.txt任意大- 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联系我吧- Local $line,$s
- For $i=1 To 48
- $line=FileReadLine("1.txt",$i)
- $s&=@CRLF & $line
- Next
- 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 就好:复制代码
作者: pengyou86 时间: 2014-1-25 18:08
回复 20# CrLf
麻烦写个完整的吧 我是个菜鸟 谢谢
作者: CrLf 时间: 2014-1-25 18:29
回复 21# pengyou86
有clip命令的话可以如此:复制代码
xp可以如此(借鉴demon的vbs方案):- @set @n=0;//&goto bat
- var Form = new ActiveXObject('Forms.Form.1')
- with(Form.Controls.Add("Forms.TextBox.1").Object)
- {
- MultiLine = true
- Text = WScript.StdIn.ReadAll()
- SelStart = 0
- SelLength = TextLength
- Copy()
- }
-
- /*
- :bat
- @more +48 1.txt|cscript -e:jscript %0
- pause
- :*/
复制代码
作者: CrLf 时间: 2014-1-25 18:40
来个ahk:- text := ""
- Loop, Read, 1.txt
- if (A_Index>48)
- text := text A_LoopReadLine "`r`n"
-
- clipboard := text
- return
复制代码
au3 和 ahk 处理人机交互真给力
作者: simon4055 时间: 2014-1-25 20:43
这个好 mark一下 留着用.
学习了..
作者: terse 时间: 2014-1-25 20:49
本帖最后由 terse 于 2014-1-25 20:53 编辑
纯P 环境 WIN7- @echo off&setlocal enabledelayedexpansion
- (for /f "delims=" %%i in (1.txt) do set /an+=1&if !n! leq 48 echo %%i)>$
- clip<$
- >$ more +48 1.txt
- move $ 1.txt
- pause
复制代码
- @echo off&setlocal enabledelayedexpansion
- del $* 2>nul
- for /f "delims=" %%i in (1.txt) do set /an+=1&if !n! gtr 48 (>>$$ echo %%i)else >>$ echo %%i
- clip<$&move $$ 1.txt >nul&del $*
- 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 编辑
是这意思吧:- @set @n=0;//&goto bat
- var Form,i,str=''
- for(i=0;i<3;i++)str+=WSH.StdIn.ReadLine()+'\r\n'
- with(new ActiveXObject('Forms.Form.1').Controls.Add("Forms.TextBox.1").Object)
- {
- MultiLine = true
- Text = str
- SelStart = 0
- SelLength = TextLength
- Copy()
- }
- WSH.Echo(WSH.StdIn.ReadAll())
-
- /*
- :bat
- @<1.txt cscript -nologo -e:jscript %0|sort /+9999|sort /+9999 /o 1.txt
- pause
- :*/
复制代码
要求有变动最好也能更新到顶楼
作者: 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 编辑
- //&cls&mshta "%~f0"|find /v ""&pause&exit
-
- <script>
- var fso = new ActiveXObject('Scripting.Filesystemobject');
- var txtfile = '文本.txt';
- var n = 48;
- var s = '';
- try{
- var f = fso.OpenTextFile(txtfile, 1);
- for(i=0;i<n;i++)s+=f.ReadLine()+'\r\n';
- var text = f.ReadAll();
- f.Close();
- }catch(e){}
- clipboardData.setData('text', s);
- fso.OpenTextFile(txtfile, 2).Write(text);
- close();
- </script>
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |