Board logo

标题: [文本处理] [已解决]求个批处理,在文本文件中第二行插入二行内容,并删除文中所有空格 [打印本页]

作者: wbkl    时间: 2015-4-12 12:25     标题: [已解决]求个批处理,在文本文件中第二行插入二行内容,并删除文中所有空格

本帖最后由 wbkl 于 2015-4-12 16:06 编辑

工作中需要写个批处理,能在文本文件中的第2行开始,插入2行内容,其它内容不能改动;并且还需要删除文中所有的空格。求助大婶啊
作者: wbkl    时间: 2015-4-12 13:17

找了好辛苦找了个差不多的,但是需要修改一下,
@echo off
(for /f "delims=" %%a in (in.txt) do (
    for %%b in (%%a) do set /p=%%b<nul
))>tem
del /q a.txt&ren tem a.txt
start a.txt

这份代码会删除文本中所有的空格和换行符,但我不能删除换行符,只要删除文本中所有的空格。求大婶帮助修改一下。
作者: pcl_test    时间: 2015-4-12 14:14

  1. @echo off & setlocal enabledelayedexpansion
  2. set n=1
  3. (for /f "delims=" %%a in ('type "测试.txt"') do (
  4. set "str=%%a"
  5. set "str=!str: =!"
  6. echo,!str!
  7. if !n! == 2 (
  8. echo,添加内容1
  9. echo,添加内容2
  10. )
  11. set/a n+=1
  12. ))>$
  13. move $ "测试.txt"
  14. pause
复制代码

作者: wbkl    时间: 2015-4-12 14:39

回复 3# tigerpower


    额,这个好像不是WINDOWS的内部命令吧?XP下BAT执行出错啊。
作者: wbkl    时间: 2015-4-12 14:43

回复 4# pcl_test


    测试了一下,可以的,灰常感谢啊,我来套上我的参数 试试。
作者: wbkl    时间: 2015-4-12 14:46

回复 4# pcl_test


    一些基本的DOS命令是学会了,就这些 FOR IF SET 复杂的命令没来得及学
作者: wbkl    时间: 2015-4-12 14:53

回复 4# pcl_test


      倒数第3行的代码能不能直接改成“ ))>测试.txt”?
作者: pcl_test    时间: 2015-4-12 15:01

回复 8# wbkl

you can try
作者: wbkl    时间: 2015-4-12 15:02

回复 9# pcl_test


    我试了是可以的,但是不知道后面的move $ *.txt 到底有什么必要的意义。
作者: pcl_test    时间: 2015-4-12 15:06

回复 10# wbkl
先输出到临时文件$,再把$替换原来的txt文件
作者: wbkl    时间: 2015-4-12 15:07

回复 11# pcl_test


    这个我知道,我是说这样有什么必要的意义吗?为什么不直接输出到文本文件呢。
作者: pcl_test    时间: 2015-4-12 15:46

回复 12# wbkl
可以避免原txt被占用导致无法输入内容,使得原txt被清空
作者: wbkl    时间: 2015-4-12 15:47

回复 12# pcl_test


    学习了,非常 感谢。。。
作者: pcl_test    时间: 2015-4-12 15:49

问题得到解决后请在标题最前面注明[已解决]
http://www.bathome.net/thread-3473-1-1.html
作者: wbkl    时间: 2015-4-12 16:05

回复 14# pcl_test


    copy.
作者: wbkl    时间: 2015-4-12 16:47

回复 14# pcl_test


    刚才这段代码可以修改A.txt,删除了所有的空格,并在第2行中插入了2行内容;但如果还需要修改另一个B.txt,只需要在B.txt第2行开始增加2行呢,不要替换空格。
作者: pcl_test    时间: 2015-4-12 16:49

回复 16# wbkl

替换空格是这句set "str=!str: =!"对于不需要替换空格的,把这句去掉
作者: wbkl    时间: 2015-4-12 16:59

回复 17# pcl_test


@echo off
setlocal enabledelayedexpansion
set n=1
(for /f "delims=" %%a in ('type "A.txt"') do (
set "str=%%a"
set "str=!str: =!"
echo,!str!
if !n! == 2 (
echo,添加内容1
echo,添加内容2
)
set/a n+=1
))>$
move $ "A测试.txt"

(for /f "delims=" %%a in ('type "B.txt"') do (
set "str=%%a"
echo,!str!
if !n! == 2 (
echo,添加内容1
echo,添加内容2
)
set/a n+=1
))>$
move $ "B测试.txt"
pause
作者: wbkl    时间: 2015-4-12 17:00

回复 17# pcl_test


    这样可对?
作者: pcl_test    时间: 2015-4-12 17:07

回复 19# wbkl
you can try
作者: wbkl    时间: 2015-4-12 17:09

回复 20# pcl_test


    我试了是可以的,我还以为 可以再简化一下代码呢。
作者: pcl_test    时间: 2015-4-12 17:18

本帖最后由 pcl_test 于 2015-4-12 17:24 编辑

回复 21# wbkl
  1. @echo off & setlocal enabledelayedexpansion
  2. for %%i in ("a.txt" "b.txt") do (
  3. set n=1
  4. (for /f "delims=" %%a in ('type %%i') do (
  5. set "str=%%a"
  6. if %%i == "a.txt" set "str=!str: =!"
  7. echo,!str!
  8. if !n! == 2 (
  9. echo,添加内容1
  10. echo,添加内容2
  11. )
  12. set/a n+=1
  13. ))>$
  14. move $ "%%i"
  15. )
  16. pause
复制代码

作者: apang    时间: 2015-4-12 17:37

本帖最后由 apang 于 2015-4-12 18:13 编辑
  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do (
  3.         set "s=%%a"
  4.         setlocal enabledelayedexpansion
  5.         echo,!s: =!
  6.         endlocal
  7.         if not defined a if defined b (
  8.                 echo,1
  9.                 echo,2
  10.                 set a=1
  11.         ) else set b=1
  12. )
  13. pause
复制代码

作者: wbkl    时间: 2015-4-12 21:06

回复 22# pcl_test


    谢谢,由于B.txt中第2行插入的和A.txt中不一样,我还是自己修改了一下,可以达到效果了。。。非常感谢!以后要加强学习了。
作者: wbkl    时间: 2015-4-12 21:06

回复 23# apang


    谢谢,不过这个没用啊,没试出来效果。。。
作者: wbkl    时间: 2015-4-12 21:14

回复 22# pcl_test


    大婶,我早前遇到个问题一直没搜到过答案,想请教一下批处理能不能实现:在一个文本文件中的第二列(全是文字或是空的)后插入一列,然后插入的列生成的是第二列的简码(就是获取每个中文的声母),文本有2种格式,一种是6列,一种是9列,每列中间都有2个分隔符~~

这个问题后来一直没找到过答案,感觉批处理可能不太能实现,所以无奈最后我一直在用EXCEL自义的函数在一个一个替换,一直做到现在
作者: wbkl    时间: 2015-4-13 13:58

回复 22# pcl_test


    大婶,你看看 可能实现,不用帮写的,我只是想知道能不能实现;
作者: pcl_test    时间: 2015-4-13 14:04

回复 27# wbkl

把样文先发上来看看
作者: wbkl    时间: 2015-4-14 22:42

回复 28# pcl_test



    不好意思,白天的时候上班太忙了没来得及回复 。
    就像这样的文件,需要在第二列的后面,插入第三列,这第三列是获取第二列的简码,也就是文字拼音的声母大写。
作者: pcl_test    时间: 2015-4-14 23:51

回复 29# wbkl
批处理可以做到,不过要制作一个标有全部汉字和拼音的txt,用查表法可以实现,难的是要有这样一个txt
作者: pcl_test    时间: 2015-4-15 15:34

本帖最后由 pcl_test 于 2015-4-15 15:37 编辑

回复 29# wbkl
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "skip=2 tokens=1,2* delims=~" %%a in ('type "测试A.txt"') do (
  4. set s=
  5. set t=
  6. set "name=%%b"
  7. set str=%%bfedcba9876543210
  8. set/a len=0x!str:~15,1! &set/a len-=1
  9. for /l %%x in (0 1 !len!) do (
  10. for /f "skip=2 tokens=1* delims=: " %%i in ('find "!name:~%%x,1!" %0') do (
  11. set "sm=%%j"
  12. if "!sm:~,2!" == "zh" (
  13. set sm=!sm:zh=Zh! &set "s=!s!!sm:~,2!"
  14. ) else if "!sm:~,2!" == "ch" (
  15. set sm=!sm:ch=Ch! &set "s=!s!!sm:~,2!"
  16. ) else if "!sm:~,2!" == "sh" (
  17. set sm=!sm:sh=Sh! &set "s=!s!!sm:~,2!"
  18. ) else (
  19. for %%t in (bB pP mM fF dD tT nN lL gG kK hH jJ qQ xX rR zZ cC sS yY wW) do (
  20. set "t=%%t"
  21. if "!t:~,1!" == "!sm:~,1!" set "sm=!t:~1,1!" &set "s=!s!!sm:~,1!"
  22. ))))
  23. echo,%%a~~%%b~~!s!~~%%c
  24. )
  25. pause
  26. ::张 zhang
  27. ::三 san
  28. ::李 li
  29. ::四 si
  30. ::王 wang
  31. ::五 wu
  32. ::马 ma
  33. ::六 liu
  34. ::赵 zhao
  35. ::七 qi
  36. ::杨 yang
  37. ::八 ba
  38. ::孙 sun
  39. ::九 jiu
  40. ::吴 wu
  41. ::十 shi
复制代码

作者: wbkl    时间: 2015-4-16 13:49

回复 31# pcl_test


    我懂了,非常 感谢 。。。看来我还是用EXCEL吧,不过EXCEL本身也没有这样的函数,我也是网上找的别人自定义的函数。




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