Board logo

标题: [文本处理] 批处理如何删除txt文本中每行特定位置的数字字符串的前导/前面/开头的0(零) [打印本页]

作者: leo198444    时间: 2011-9-12 15:28     标题: 批处理如何删除txt文本中每行特定位置的数字字符串的前导/前面/开头的0(零)

本帖最后由 pcl_test 于 2017-4-23 09:24 编辑

批处理如何删除txt中小于100位数的0?
我有一文本内容如下

StrCpy $download001 'http://3.share.photo.xuite.net/hannstar/13e42e5/1884112/69088533_x.jpg'
StrCpy $download002 'http://3.share.photo.xuite.net/hannstar/13e4263/1884112/69088659_x.jpg'
StrCpy $download003 'http://3.share.photo.xuite.net/hannstar/13e42eb/1884112/69088795_x.jpg'
.
.
.
StrCpy $download019 'http://3.share.photo.xuite.net/hannstar/13e4250/1884112/69091968_x.jpg'
StrCpy $download020 'http://3.share.photo.xuite.net/hannstar/13e42cc/1884112/69092092_x.jpg'
StrCpy $download021 'http://3.share.photo.xuite.net/hannstar/13e423d/1884112/69092205_x.jpg'


我要删除百位数内开头的0字符

请问要怎么处理

感谢!
感謝!
作者: CrLf    时间: 2011-9-12 17:13

  1. @echo off
  2. (for /f "delims=" %%a in (a.txt) do (
  3.    set str=%%a
  4.    setlocal enabledelayedexpansion
  5.    set str=!str:$download0=$download!
  6.    echo !str:$download0=$download!
  7.    endlocal
  8. ))>$
  9. move $ a.txt
复制代码

作者: leo198444    时间: 2011-9-12 17:33

CrLf 发表于 2011-9-12 17:13


成功了

十分感谢你帮忙

另外再请教一下

文本处理后,可以依照数字由小至大作行排序吗?

如下

StrCpy $download1 'http://3.share.photo.xuite.net/hannstar/13e42e5/1884112/69088533_x.jpg'
StrCpy $download2 'http://3.share.photo.xuite.net/hannstar/13e4263/1884112/69088659_x.jpg'
StrCpy $download3 'http://3.share.photo.xuite.net/hannstar/13e42eb/1884112/69088795_x.jpg'
StrCpy $download4 'http://3.share.photo.xuite.net/hannstar/13e42eb/1884112/69088795_x.jpg'
.
.
.
.


感谢!
作者: leo198444    时间: 2011-9-12 17:37

我找了这篇套用,可以按数字照排序
http://www.bathome.net/viewthrea ... hlight=%C5%C5%D0%F2

但因为我文本的数值超过三位数,排序会变成这样

StrCpy $download1 'http://3.share.photo.xuite.net/hannstar/13e42e5/1884112/69088533_x.jpg'
StrCpy $download10 'http://3.share.photo.xuite.net/hannstar/13e42d5/1884112/69089797_x.jpg'
StrCpy $download107 'http://3.share.photo.xuite.net/hannstar/13e4227/1884112/69106263_x.jpg'
StrCpy $download108 'http://3.share.photo.xuite.net/hannstar/13e42e5/1884112/69106453_x.jpg'
StrCpy $download109 'http://3.share.photo.xuite.net/hannstar/13e421e/1884112/69106766_x.jpg'
StrCpy $download11 'http://3.share.photo.xuite.net/hannstar/13e42f1/1884112/69090081_x.jpg'
StrCpy $download110 'http://3.share.photo.xuite.net/hannstar/13e42a6/1884112/69106902_x.jpg'
StrCpy $download111 'http://3.share.photo.xuite.net/hannstar/13e42a3/1884112/69107155_x.jpg'
StrCpy $download112 'http://3.share.photo.xuite.net/hannstar/13e4269/1884112/69107353_x.jpg'
StrCpy $download113 'http://3.share.photo.xuite.net/hannstar/13e4248/1884112/69107576_x.jpg'
StrCpy $download114 'http://3.share.photo.xuite.net/hannstar/13e421e/1884112/69107790_x.jpg'
StrCpy $download115 'http://3.share.photo.xuite.net/hannstar/13e42ce/1884112/69107966_x.jpg'
StrCpy $download116 'http://3.share.photo.xuite.net/hannstar/13e4254/1884112/69108100_x.jpg'
StrCpy $download117 'http://3.share.photo.xuite.net/hannstar/13e4239/1884112/69108329_x.jpg'
StrCpy $download118 'http://3.share.photo.xuite.net/hannstar/13e42d4/1884112/69108484_x.jpg'
StrCpy $download119 'http://3.share.photo.xuite.net/hannstar/13e4255/1884112/69108613_x.jpg'
StrCpy $download12 'http://3.share.photo.xuite.net/hannstar/13e42a4/1884112/69090516_x.jpg'

请问该怎么修改谢谢
作者: CrLf    时间: 2011-9-12 17:39

要排序就把那行
  1. (for /f "delims=" %%a in (a.txt) do (
复制代码
换成:
  1. (for /f "delims=" %%a in ('sort /+12 a.txt') do (
复制代码

作者: leo198444    时间: 2011-9-12 17:48

要排序就把那行换成:
CrLf 发表于 2011-9-12 17:39




   
你好,我照您的方法加入后

輸出後的文本变成空白了

/+12 这指令不太懂其意涵@@
作者: leo198444    时间: 2011-9-12 17:51

我不知道sed会不会冲突到,目前我整个处理文本的指令如下
  1. sed -r "s/.*part([0-9][0-9][0-9]).rar.*src=.(.*). border.*/StrCpy $download\1 '\2'/" a.txt >output.txt
  2. sed -i "/^$/d" output.txt
  3. sed -e "s/download00/download/g" output.txt
  4. @echo off
  5. (for /f "delims=" %%a in ('sort /+12 output.txt') do (
  6.    set str=%%a
  7.    setlocal enabledelayedexpansion
  8.    set str=!str:$download0=$download!
  9.    echo !str:$download0=$download!
  10.    endlocal
  11. ))>$
  12. move $ output.txt
复制代码

作者: leo198444    时间: 2011-9-12 17:54

这是我要处理的文本

请先进帮我排序测试,谢谢
作者: Seder    时间: 2011-9-12 23:49

本帖最后由 Seder 于 2011-9-13 10:54 编辑

直接处理你上个帖子那个文本就可以了,不用另外再弄个批处理。
你再上个帖子说清楚点就可以了麻
  1. sed -r "s/.*part0*([1-9][0-9]*).rar.*src=.(.*). border.*/StrCpy $download\1 '\2'/" test
复制代码

作者: leo198444    时间: 2011-9-13 19:52

本帖最后由 leo198444 于 2011-9-13 19:53 编辑
直接处理你上个帖子那个文本就可以了,不用另外再弄个批处理。
你再上个帖子说清楚点就可以了麻
Seder 发表于 2011-9-12 23:49




    你好,不好意思我尽力去解释

目前我遇上的问题是不知道怎样对处理好的文本,依数字对行作排序

处理前
StrCpy $download267 'http://9.share.photo.xuite.net/leo1984leoleo/19fece9/3558640/135530233_x.jpg'
StrCpy $download262 'http://9.share.photo.xuite.net/leo1984leoleo/19fecf3/3558640/135530243_x.jpg'
StrCpy $download261 'http://9.share.photo.xuite.net/leo1984leoleo/19fec02/3558640/135530258_x.jpg'
StrCpy $download263 'http://9.share.photo.xuite.net/leo1984leoleo/19fec0d/3558640/135530269_x.jpg'
StrCpy $download269 'http://9.share.photo.xuite.net/leo1984leoleo/19fec1d/3558640/135530285_x.jpg'
StrCpy $download268 'http://9.share.photo.xuite.net/leo1984leoleo/19fec2d/3558640/135530301_x.jpg'
StrCpy $download266 'http://9.share.photo.xuite.net/leo1984leoleo/19fec39/3558640/135530313_x.jpg'
StrCpy $download261 'http://9.share.photo.xuite.net/leo1984leoleo/19fec46/3558640/135530326_x.jpg'
StrCpy $download265 'http://9.share.photo.xuite.net/leo1984leoleo/19fec53/3558640/135530339_x.jpg'
StrCpy $download264 'http://9.share.photo.xuite.net/leo1984leoleo/19fec5f/3558640/135530351_x.jpg'

处理后
StrCpy $download261 'http://9.share.photo.xuite.net/leo1984leoleo/19fecf3/3558640/135530243_x.jpg'
StrCpy $download262 'http://9.share.photo.xuite.net/leo1984leoleo/19fec02/3558640/135530258_x.jpg'
StrCpy $download263 'http://9.share.photo.xuite.net/leo1984leoleo/19fec0d/3558640/135530269_x.jpg'
StrCpy $download264 'http://9.share.photo.xuite.net/leo1984leoleo/19fec1d/3558640/135530285_x.jpg'
StrCpy $download265 'http://9.share.photo.xuite.net/leo1984leoleo/19fec2d/3558640/135530301_x.jpg'
StrCpy $download266 'http://9.share.photo.xuite.net/leo1984leoleo/19fec39/3558640/135530313_x.jpg'
StrCpy $download267 'http://9.share.photo.xuite.net/leo1984leoleo/19fec46/3558640/135530326_x.jpg'
StrCpy $download268 'http://9.share.photo.xuite.net/leo1984leoleo/19fec53/3558640/135530339_x.jpg'
StrCpy $download269 'http://9.share.photo.xuite.net/leo1984leoleo/19fec5f/3558640/135530351_x.jpg'

谢谢
作者: hankerer    时间: 2011-9-13 20:02

本帖最后由 hankerer 于 2011-9-13 20:05 编辑
你好,我照您的方法加入后

輸出後的文本变成空白了

/+12 这指令不太懂其意涵@@
leo198444 发表于 2011-9-12 17:48


应该是从第几个字符开始排序。你换成16试试?
作者: leo198444    时间: 2011-9-13 20:14

应该是从第几个字符开始排序。你换成16试试?
hankerer 发表于 2011-9-13 20:02


如果数字是决定起始字符运行

我刚试了代码,结果是一片空白

请您看看我要测试的文本

谢谢
作者: leo198444    时间: 2011-9-13 20:18

刚试了一下

原来是有重复的数字

抱歉抱歉

请问有指令可以帮助清除重复的行吗@@
作者: leo198444    时间: 2011-9-13 20:46

你們不能這樣拋棄我不管啊

我是帶著真心誠意的來問問題的

人和人之間互相幫助是基本道理

所謂各有所長,互惠互利

懂得批處理幫忙批處理,懂得修冰箱的幫忙修冰箱,我懂php就寫php

這世界不就是一點一滴構築起來的

我們有困難能受別人幫忙,有能力也能夠快樂的幫助別人

這世界才感到美好是不?

大家都是中國人,團結幫忙不是挺好的

我的爺啊哥啊

來幫幫我這台灣人吧

嗚嗚嗚嗚
作者: leo198444    时间: 2011-9-13 20:49

你们要体谅学程式会有盲点啊

我有学其他程序语言,再学习批处理反而特别感到困难

因为会受到自己学习的逻辑给影响,涵式特别脑袋转不过来
作者: leo198444    时间: 2011-9-13 20:49

你們再不理我,我要叫警察囉!

你們是稱作公安是吧?
作者: broly    时间: 2011-9-13 21:02

楼主你不要着急,不是大家不愿意帮你,或许大家都没空先。你要知道论坛主要成员都是有工作的人,并不是都有时间玩电脑的,比如我就是晚上才有时间(现在是手机浏览)。你要有耐心。论坛大部分是些热心的批处理爱好者,这点可以肯定
作者: leo198444    时间: 2011-9-13 21:12

好吧

既然板主大人都這樣說了

我就靜靜等候

所謂有志者事竟成

我等到海枯石爛、天崩地裂、海水倒灌、地球毀滅、日本沉沒也要等到人幫忙

感謝!
作者: weichenxiehou    时间: 2011-9-13 21:12

本帖最后由 weichenxiehou 于 2011-9-13 21:18 编辑

用sort基本上解决不了排序的问题,它应该是逐个字符比较的,不会认得那是数字的,倒是可以用for来解析。但是用去除0之前的文件用sort来排序应该就没有问题啊……我想楼主可能是把去除0之后的文件拿来用sort排序了……
作者: broly    时间: 2011-9-13 21:16

题外话:楼主学习了其他编程语言?PHP?批处理入门应该不难的。大部分编程语言学习语法都不太难,主要是学习一个良好算法。
作者: leo198444    时间: 2011-9-13 21:28

不难是不难

原理都在变量和loop这些东西

难就难在批处理我还不熟,不然我就不是在这里发问了,而是跑去作教学了
回楼上

你说的非常好

没有0的千位数,它不会排序了!!

怎么办@@
作者: CrLf    时间: 2011-9-14 09:09

已测可行,不懂你那边为什么会变成空文件
  1. @echo off
  2. (for /f "delims=" %%a in ('sort /+12 a.txt') do (
  3.    set str=%%a
  4.    setlocal enabledelayedexpansion
  5.    set str=!str:$download0=$download!
  6.    echo !str:$download0=$download!
  7.    endlocal
  8. ))>$
  9. move $ a.txt
复制代码

作者: wc726842270    时间: 2011-9-14 09:24

呵呵。LZ真有意思,不用这么急吧!!现在看客多了,“高手”一般的也低调了。
作者: zaixinxiangnian    时间: 2011-9-14 09:41

crlf 版主说的对啊,加上SORT可以的 我也试了
  1. @echo off
  2. for /f "delims=" %%i in ('sort /+16 1.txt') do (
  3.    setlocal enabledelayedexpansion
  4.    set str=%%i
  5.    set str=!str:load0=load!
  6.    echo !str:load0=load!
  7. )
  8. pause
复制代码

作者: Batcher    时间: 2011-9-14 10:09

回复 13# leo198444


第几行跟第几行是重复的?
作者: Batcher    时间: 2011-9-14 10:15

回复 14# leo198444


楼主不能這樣拋棄这个帖子不管啊

大家是帶著真心誠意的來解答問題的

人和人之間互相幫助是基本道理

所謂各有所長,互惠互利

懂得批處理幫忙批處理,懂得修冰箱的幫忙修冰箱,大家懂bat就寫bat

這世界不就是一點一滴構築起來的

我們有困難能受別人幫忙,有能力也能夠快樂的幫助別人

這世界才感到美好是不?

大家都是中國人,團結幫忙不是挺好的

我的神啊

你這台灣人来回复一下大家的这么多答案吧

吼吼哈嘿
作者: Batcher    时间: 2011-9-14 10:21

回复 24# zaixinxiangnian


你用8楼的文件试试就发现问题所在了
作者: zaixinxiangnian    时间: 2011-9-14 18:45

回复 27# Batcher


    8楼的文件不是排好的吗?怎么还要按序排啊
作者: leo198444    时间: 2011-9-14 20:12

那是我自己手動排好的

我要處理的文本排序是亂的

所以需要批處理幫助排序

謝謝
作者: leo198444    时间: 2011-9-14 20:29

不然可以以文本行末位的數字作排序嗎?

因為它是固定的數

StrCpy $download79 'https://lvt6gg.bay.livefilestore.com/y1psdBvEPG39iVfdH58CZBuPbajOp37iBDJQLcdGQbt3jhwSuxDuv0MnIzuYu9ptqqqOCOfSjFBEKaFicPdTdV8qduMjl0KJM2M/Win7_x64.part004.rar.JPG'
StrCpy $download80 'https://lvt6gg.bay.livefilestore.com/y1pb38jKH_1mp5XAXGLeVh0a3ajP-mEc0DzXKYv7ooxwfbtjIFwwlhkXyii0wQXvNTr4RZM66iZxjSvXs-8HRTf4zFQPAKx_uA-/Win7_x64.part003.rar.JPG'

StrCpy $download81 'https://lvt6gg.bay.livefilestore.com/y1p7KDcW7ICbeExpVRO6lknFvF8yKxmxotWqMzW0SwqUD6WDjUlJFTyb80cXx4hLsF-Z-ecBJ0VWolzP58kngxNQ3EeyCkeQ_qN/Win7_x64.part002.rar.JPG'

StrCpy $download82 'https://lvt6gg.bay.livefilestore.com/y1pTKzUg907kJ3c4M2_-mH6cXq3kQUmWLw6C_7T5T9SyfBTwlPD0Gv5uKKuh8oGaeRX71978EkjQ9HINwqma515HrLEbWCFL6_z/Win7_x64.part001.rar.JPG'

作者: leo198444    时间: 2011-9-14 20:43

等你等到我心痛 等你等到沒有夢
所有感覺已成空 就讓一切都隨風
等你等到我心痛 我的心情誰會懂
所有真情的感動 已消失無影蹤

愛你愛你始終 恨你恨你不懂
我付出的心有多深重 反反覆覆的愛不能相擁
愛你愛你始終 恨你恨你不懂
我真的等你等到心痛 平平淡淡的愛怎能相容
作者: leo198444    时间: 2011-9-14 20:59

本帖最后由 leo198444 于 2011-9-14 21:01 编辑

我求你们啦

帮帮我

我查找很多站上很多文章,但是还是搞不懂sed特定字串内的数字,去排序行的方法

好心的大爷们啊
作者: Batcher    时间: 2011-9-14 23:13

回复 29# leo198444


8楼的文件你是按照什么规律排序的?是$download后面的那个数字吗,如果是的话,84行和85行何解?
作者: weichenxiehou    时间: 2011-9-15 11:44

回复 32# leo198444
只想问一点:那些数字的上下限是什么?
作者: Batcher    时间: 2011-9-15 11:49

回复 32# leo198444


不用继续查了,大家一般都不直接使用sed来排序,就像你一般不会骑着自行车在铁路上飙车一样。
作者: FOR    时间: 2011-10-4 23:12

都是 3 位数的为何不先排序再替换?还是我没理解题意?
  1. @echo off
  2. (for /f "delims=" %%i in ('sort "a.txt"') do (
  3. set "str=%%i"
  4. setlocal enabledelayedexpansion
  5. set "str=!str:$download0=$download!"
  6. echo;!str:$download0=$download!
  7. endlocal
  8. ))>tem.txt
  9. start tem.txt
复制代码





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