Board logo

标题: [文本处理] [已解决]批处理如何除去本行的空格? [打印本页]

作者: batpro    时间: 2011-6-13 23:05     标题: [已解决]批处理如何除去本行的空格?

1.txt中

C:\Documents and Settings\Administrator\「开始」菜单\程序\启动\32B236.lnk
(此处有一空格)C:\WINDOWS\system32\431CAD\32B236.EXE   
要求生成

C:\Documents and Settings\Administrator\「开始」菜单\程序\启动\32B236.lnk
C:\WINDOWS\system32\431CAD\32B236.EXE   
希望用精简的代码 谢谢

新手边学边写
作者: 601997526    时间: 2011-6-13 23:20

这个以前好像在哪见人写过
  1. @echo off
  2. for /f "tokens=*" %%i in (1.txt) do echo,%%i>>2.txt
复制代码

作者: applba    时间: 2011-6-14 00:47

为什么要用精简的代码?既然是新手就要用基础的代码。
等你进阶了,自然就可以写出精简的代码。
作者: batpro    时间: 2011-6-14 12:51

3# applba

哦,谢谢
作者: Batcher    时间: 2011-6-14 13:02

  1. sed "s/^ //" a.txt | more >b.txt
复制代码
http://bbs.bathome.net/thread-1114-1-1.html
作者: Hello123World    时间: 2011-6-14 15:50

2# 601997526
这空格是怎么去掉的呢?
  1. @echo off
  2. set a=  hello
  3. echo,%a%
  4. pause>nul
复制代码
上面这个去不掉,能解释一下原理吗
作者: CrLf    时间: 2011-6-14 16:47

本帖最后由 zm900612 于 2011-6-14 17:55 编辑

6# Hello123World


for /f中的默认分隔符"delims=[tab][半角空格]"(原以为全角空格也是默认分隔符,多谢楼下两位指正),默认tokens=1代表以delims中的设置为分隔符取字符串的第一节。
当tokens=*时代表取从第一节开始之后的所有内容,也就是说,它把字符串开头的分隔符舍弃了,也就起到了去除多余空格的目的。

echo;%a%的想法不错,不过在echo中貌似是不可行的,倒是在win7的set /p中可以,因为win7的set /p会自动舍弃字符串最开始的空格。
作者: 我是马甲    时间: 2011-6-14 17:18

全角空格  貌似不是
作者: tmplinshi    时间: 2011-6-14 17:26

全角空格  貌似不是
我是马甲 发表于 2011-6-14 17:18

经测试,确实不是。(测试环境: XP SP2)
作者: CrLf    时间: 2011-6-14 17:56

多谢纠错,已修正
作者: Hello123World    时间: 2011-6-15 21:07

看了7楼的代码,方明白是,惹的祸。
@echo off
for /f "tokens=*" %%i in (1.txt) do echo,%%i>>2.txt

这里echo 后面的,是多余的。
作者: Hello123World    时间: 2011-6-15 22:02

而且让我加深了对delims 和tokens 的理解,“delims=” 和 “tokens=*” 在这里区别就出来了(以前我一直是当做一样的作用在用)。




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