Board logo

标题: [文本处理] 批处理如何将文本里的多行字符串合并成一行并在指定行内容后面实现换行 [打印本页]

作者: ads350668398    时间: 2016-12-14 17:03     标题: 批处理如何将文本里的多行字符串合并成一行并在指定行内容后面实现换行

本帖最后由 pcl_test 于 2016-12-14 20:55 编辑

delims=13 怎么添加13为分隔符
ss.txt
11
6
10
13
16
14
11
1
10
13
1
9
8
12
6
5
15
13
8
3
14
9
15
6
1
11
4
13
12
  1. @echo off
  2. for /f "tokens=1-3 delims=13" %%a in (ss.txt) do (set /p=%%a <nul>>183.txt)
复制代码
输出:606409826558495642
这是啥 这是啥???
--------------------
希望结果:
11 6 10 13
16 14 11 1 10 13
1 9 8 12 6 5 15 13
8 3 14 9 15 6 1 11 4 13
作者: Batcher    时间: 2016-12-14 17:06

for命令教程第22页有介绍:不要企图把字符串作为一个整体分隔符
http://bbs.bathome.net/thread-31727-1-1.html
作者: ads350668398    时间: 2016-12-14 17:17

回复 2# Batcher


    是啊跟你说的一样
没有我想要是还是
作者: ads350668398    时间: 2016-12-14 17:38

本帖最后由 ads350668398 于 2016-12-14 17:41 编辑
  1. @echo off
  2. for /f "tokens=1-3 delims=" %%a in (ss.txt) do (
  3. if %%a==13 (echo s>>183.txt) else (set /p=%%a <nul>>183.txt))
复制代码
11 6 10 s
16 14 11 1 10 s
1 9 8 12 6 5 15 s
8 3 14 9 15 6 1 11 4 s
12
这是个意外??
为什么会这样??菜鸟求解释下
delims="这里没有用S分割??
作者: GNU    时间: 2016-12-14 18:15

本帖最后由 GNU 于 2016-12-14 18:18 编辑

回复 4# ads350668398
  1. @echo off
  2. (for /f %%a in (ss.txt) do (
  3.     if %%a==13 (
  4.         echo,
  5.         echo,s
  6.     ) else (
  7.         set /p=%%a <nul
  8.     )
  9. ))>183.txt
复制代码

作者: ads350668398    时间: 2016-12-14 18:23

回复 5# GNU


    是这个上面其实我是忘记写s【 delims="】
但是后 发下 写和不写结果是一样的??
作者: ads350668398    时间: 2016-12-14 18:26

echo echo s
s就换行了
作者: ads350668398    时间: 2016-12-14 18:36

delims=13的结果
606409826558495642
为什么?
作者: 老刘1号    时间: 2016-12-14 18:39

  1. echo off&cls
  2. setlocal ENABLEDELAYEDEXPANSION
  3. (for /f "tokens=1* eol=" %%a in (text.txt) do set tmp=%%a&&echo=!tmp:13=^|!)>tmp.txt
  4. 然后就for/f"delims=^|"就可以咯
复制代码

作者: Batcher    时间: 2016-12-14 21:00

回复 8# ads350668398


    因为delims=13的话,数字1和数字3都是分隔符。
作者: /zhqsystem/zhq    时间: 2016-12-15 00:26

本帖最后由 /zhqsystem/zhq 于 2016-12-15 00:39 编辑

回复 1# ads350668398
醉了问题真多,基础牢固也不需要这么多问题了
  1. for /f "delims=" %%i in ('type "%~f1"')do if /i "%%i"=="13" (set "#=!#! %%i"
  2. for /l %%n in (1,1,10)do if /i "!#:~0,1!"==" " set "#=!#:~1!"
  3. echo,!#!
  4. set "#=")else if defined # (set "#=!#! %%i")else set "#=%%i"
  5. )
  6. if defined # echo,!#!&&rem:此行用于结尾非13的行合并
复制代码

作者: ads350668398    时间: 2016-12-15 10:23

回复 10# Batcher


    是从这个结果 知道1 3都是分隔符的么?
606409826558495642
作者: Batcher    时间: 2016-12-15 15:08

回复 12# ads350668398


for命令的教程里面有介绍,仔细读一遍就知道啦。
http://bbs.bathome.net/thread-2189-1-1.html




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