Board logo

标题: [文本处理] [已解决]批处理怎样删除每行第二个指定字符串之后的内容? [打印本页]

作者: qq114527345    时间: 2011-1-20 19:31     标题: [已解决]批处理怎样删除每行第二个指定字符串之后的内容?

有一文本如下:
  1. "GlobalMap.Trophy","Trophies","Трофеи"
  2. ,,
  3. "ESCAPE SCREEN",,
  4. "EscapeScreen.Caption","MENU","МЕНЮ"
  5. "EscapeScreen.Resume","Continue","Продолжить"
  6. "EscapeScreen.Restart","Restart","Начать,заново"
  7. "EscapeScreen.Options","Settings","Настройки"
  8. "EscapeScreen.Quit","Exit","Выйти"
  9. "EscapeScreen.Map","Map","Карта"
  10. "EscapeScreen.ConfirmExit.Caption","EXIT","ВЫХОД"
复制代码

请问如何用批处理删除每行第二个","之后的内容(包括双引号)?
即删除后如下:
  1. "GlobalMap.Trophy","Trophies"
  2. ,,
  3. "ESCAPE SCREEN",,
  4. "EscapeScreen.Caption","MENU"
  5. "EscapeScreen.Resume","Continue"
  6. "EscapeScreen.Restart","Restart"
  7. "EscapeScreen.Options","Settings"
  8. "EscapeScreen.Quit","Exit"
  9. "EscapeScreen.Map","Map"
  10. "EscapeScreen.ConfirmExit.Caption","EXIT"
复制代码

[ 本帖最后由 qq114527345 于 2011-1-22 21:29 编辑 ]
作者: hanyeguxing    时间: 2011-1-20 19:57

  1. @echo off
  2. (for /f "tokens=1-4 delims=:," %%a in ('findstr /n .* "a.txt"') do (
  3. if "%%d"=="" (echo %%b,%%c,) else echo %%b,%%c
  4. ))>"a_.txt"
复制代码

[ 本帖最后由 hanyeguxing 于 2011-1-20 20:04 编辑 ]
作者: greenworld    时间: 2011-1-20 21:13

for /f "tokens=1,2 delims=." %%i in (a.txt) do echo %%i.%%j>>b.txt
手机党,未测试
作者: greenworld    时间: 2011-1-21 08:06

我伟大的版主啊,话说手机上写代码就不容易,在PC端谁都会加代码引用,但手机端谁会加??连写个@echo off都要半分钟啊。。。违规扣分偶无话可说,但应该体谅一下手机端写代码的苦楚啊,然则就是不允许别人用手机写代码回复了??
作者: qq114527345    时间: 2011-1-22 12:40

感谢寒夜孤星版主还有greenworld兄弟的回复

不过delims=之后好像不能设置双引号"字符,可能是我表达得不够清楚

需要的是删除每行第二个","之后的内容(包括双引号)

比如下面的:
  1. "FINAL LEVEL SCRIPT",,
  2. "Script.Final.HeadFamily2.Thanks",":) Thank you! I don't have to worry about my grandchildren, they are not in danger anymore.",":) Спасибо тебе! Теперь я спокоен за своих внучат, больше им ничего не угрожает."
  3. "Script.Final.ShamanStone.Thanks",":) Chief, you'll stay forever in the hearts of our people!",":) Вождь, ты навсегда останешься в сердцах наших людей! "
  4. "Script.Final.Hero.Confused",":) Well, you guys make me confused...",":) Ну, ребята, вы меня смущаете..."
  5. "Script.Final.ShamanMask.Prophecy","The legend is not over yet. To return home, put the magic items on the Altar of Time.","Легенда еще не закончена. Чтобы вернуться домой, положи волшебные вещи на Алтарь времени."
  6. "Script.Final.Businessman.Bye",":) Oh, I'd like to see your world! Build a beautiful garden city... !",":) Эх, хотел бы я посмотреть на ваш мир! Построить там чудесный город-сад!.."
  7. "Script.Final.Anchoret.Bye",":) Goodbye, good Chief. Gray Wings and I will miss you!",":) Прощай, добрый вождь. Я и Серокрылый будем по тебе скучать!"
  8. "Script.Final.Hero.ChangeMind",":) You know ... Let's not hurry. I've got unfinished business...",":) А знаете что... Давайте не будем спешить. Есть у меня одно неоконченное дело..."
  9. "Script.Final.Rainbow.ReChangeMind",":)",":)"
复制代码


如果用寒夜孤星版主给出的批处理得到的将是这样的:
  1. "FINAL LEVEL SCRIPT",,
  2. "Script.Final.HeadFamily2.Thanks","
  3. "Script.Final.ShamanStone.Thanks","
  4. "Script.Final.Hero.Confused","
  5. "Script.Final.ShamanMask.Prophecy","The legend is not over yet. To return home
  6. "Script.Final.Businessman.Bye","
  7. "Script.Final.Anchoret.Bye","
  8. "Script.Final.Hero.ChangeMind","
  9. "Script.Final.Rainbow.ReChangeMind","
复制代码


正确的应该是这样
  1. "FINAL LEVEL SCRIPT",,
  2. "Script.Final.HeadFamily2.Thanks",":) Thank you! I don't have to worry about my grandchildren, they are not in danger anymore."
  3. "Script.Final.ShamanStone.Thanks",":) Chief, you'll stay forever in the hearts of our people!"
  4. "Script.Final.ShamanMask.Prophecy","The legend is not over yet. To return home, put the magic items on the Altar of Time."
  5. "Script.Final.Businessman.Bye",":) Oh, I'd like to see your world! Build a beautiful garden city... !"
  6. "Script.Final.Anchoret.Bye",":) Goodbye, good Chief. Gray Wings and I will miss you!"
  7. "Script.Final.Hero.ChangeMind",":) You know ... Let's not hurry. I've got unfinished business..."
  8. "Script.Final.Rainbow.ReChangeMind",":)"
复制代码


请问如何解决呢?

[ 本帖最后由 qq114527345 于 2011-1-22 14:01 编辑 ]
作者: hanyeguxing    时间: 2011-1-22 15:55

仅以楼主提供的样本为例:
  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do call:a "%%a"
  3. exit
  4. :a
  5. set "a=%*"
  6. set "a=%a:","=#%"
  7. set "a=%a:,=$%"
  8. for /f "tokens=1,2* delims=#" %%a in ("%a%") do if "%%c"=="" (set "a=%%a") else set "a=%%a#%%b"""
  9. set "a=%a:~1,-1%"
  10. set "a=%a:#=","%"
  11. set "a=%a:$=,%"
  12. >>a_.txt echo %a%
复制代码

作者: tmplinshi    时间: 2011-1-22 18:59

  1. @echo off
  2. (for /f "delims=" %%a in (a.txt) do (
  3.     set var=%%a
  4.     SetLocal EnableDelayedExpansion
  5.     set var=!var:","=","!
  6.     for /f "delims= tokens=1,2" %%1 in ("!var!") do (
  7.         EndLocal
  8.         echo %%1%%2
  9.     )
  10. )) >a_.txt
复制代码

作者: qq114527345    时间: 2011-1-22 21:24

非常感谢!

经测试tmplinshi版主的代码比较完美!

寒夜孤星版主的代码,有些段落删除会出错,不知道什么原因
文本大概有250K左右




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