标题: [文本处理] [已解决]求个批处理,在文本文件中第二行插入二行内容,并删除文中所有空格 [打印本页]
作者: 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
- @echo off & setlocal enabledelayedexpansion
- set n=1
- (for /f "delims=" %%a in ('type "测试.txt"') do (
- set "str=%%a"
- set "str=!str: =!"
- echo,!str!
- if !n! == 2 (
- echo,添加内容1
- echo,添加内容2
- )
- set/a n+=1
- ))>$
- move $ "测试.txt"
- 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 - @echo off & setlocal enabledelayedexpansion
- for %%i in ("a.txt" "b.txt") do (
- set n=1
- (for /f "delims=" %%a in ('type %%i') do (
- set "str=%%a"
- if %%i == "a.txt" set "str=!str: =!"
- echo,!str!
- if !n! == 2 (
- echo,添加内容1
- echo,添加内容2
- )
- set/a n+=1
- ))>$
- move $ "%%i"
- )
- pause
复制代码
作者: apang 时间: 2015-4-12 17:37
本帖最后由 apang 于 2015-4-12 18:13 编辑
- @echo off
- for /f "delims=" %%a in (a.txt) do (
- set "s=%%a"
- setlocal enabledelayedexpansion
- echo,!s: =!
- endlocal
- if not defined a if defined b (
- echo,1
- echo,2
- set a=1
- ) else set b=1
- )
- 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 - @echo off
- setlocal enabledelayedexpansion
- for /f "skip=2 tokens=1,2* delims=~" %%a in ('type "测试A.txt"') do (
- set s=
- set t=
- set "name=%%b"
- set str=%%bfedcba9876543210
- set/a len=0x!str:~15,1! &set/a len-=1
- for /l %%x in (0 1 !len!) do (
- for /f "skip=2 tokens=1* delims=: " %%i in ('find "!name:~%%x,1!" %0') do (
- set "sm=%%j"
- if "!sm:~,2!" == "zh" (
- set sm=!sm:zh=Zh! &set "s=!s!!sm:~,2!"
- ) else if "!sm:~,2!" == "ch" (
- set sm=!sm:ch=Ch! &set "s=!s!!sm:~,2!"
- ) else if "!sm:~,2!" == "sh" (
- set sm=!sm:sh=Sh! &set "s=!s!!sm:~,2!"
- ) else (
- for %%t in (bB pP mM fF dD tT nN lL gG kK hH jJ qQ xX rR zZ cC sS yY wW) do (
- set "t=%%t"
- if "!t:~,1!" == "!sm:~,1!" set "sm=!t:~1,1!" &set "s=!s!!sm:~,1!"
- ))))
- echo,%%a~~%%b~~!s!~~%%c
- )
- pause
- ::张 zhang
- ::三 san
- ::李 li
- ::四 si
- ::王 wang
- ::五 wu
- ::马 ma
- ::六 liu
- ::赵 zhao
- ::七 qi
- ::杨 yang
- ::八 ba
- ::孙 sun
- ::九 jiu
- ::吴 wu
- ::十 shi
复制代码
作者: wbkl 时间: 2015-4-16 13:49
回复 31# pcl_test
我懂了,非常 感谢 。。。看来我还是用EXCEL吧,不过EXCEL本身也没有这样的函数,我也是网上找的别人自定义的函数。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |