找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 123589|回复: 31

[文本处理] 批处理怎样将目录下的所有文本文件内的文本相邻奇偶行互换?

[复制链接]
发表于 2011-9-14 07:37:33 | 显示全部楼层 |阅读模式
比方说原来的排行:1,2,3,4,5,6,7,8
处理后的记过排行:2,1,4,3,6,5,8,7

相邻奇偶行互换
发表于 2011-9-14 08:05:01 | 显示全部楼层
你这不是奇偶列互换吗,怎么说是行呢?
发表于 2011-9-14 08:17:36 | 显示全部楼层
回复 2# Batcher
他说的那些数字应该是指的行号吧……
 楼主| 发表于 2011-9-14 08:27:42 | 显示全部楼层
回复  Batcher
他说的那些数字应该是指的行号吧……
weichenxiehou 发表于 2011-9-14 08:17


(⊙v⊙)嗯,用的是notepad2,那些数字是文本前面的行号~
发表于 2011-9-14 08:29:19 | 显示全部楼层
本帖最后由 weichenxiehou 于 2011-9-14 09:33 编辑

  1. @echo off&setlocal enabledelayedexpansion
  2. set n=&set odd=
  3. (for /f "delims=" %%i in (a.txt) do (
  4.   set/a n+=1,m=n%%2
  5.   if !m! equ 1 (set "odd=%%i") else echo,%%i&echo,!odd!
  6. ))>new.txt
  7. if %m% equ 1 echo,%odd%>>new.txt
复制代码
仅提供了自己想的思路,没去特意注意特殊字符的处理。。
发表于 2011-9-14 08:49:08 | 显示全部楼层
回复 5# weichenxiehou


如果一个文件只有3行数字,这个代码会丢掉最后一行。比如:
1
2
3
发表于 2011-9-14 08:51:49 | 显示全部楼层
本帖最后由 weichenxiehou 于 2011-9-14 08:54 编辑

回复 6# awk
不会吧?我最后一行代码特意注意这个问题啊……
发表于 2011-9-14 08:57:20 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f %%a in ('findstr /n .* a.txt') do (
  3.    setlocal
  4.    set /p a=
  5.    set /p b=
  6.    echo !b!&echo !a!
  7.    endlocal
  8. )<a.txt
复制代码
发表于 2011-9-14 08:59:50 | 显示全部楼层
回复 7# weichenxiehou


你自己试试呢,echo,%odd%>>new.txt这个不能把数字3写到文件里面吧?
发表于 2011-9-14 09:13:54 | 显示全部楼层
回复 5# weichenxiehou


    可以把最后一行放到整个语块之内,用变量延迟输出变量,这样能省一个重定向
发表于 2011-9-14 09:15:06 | 显示全部楼层
回复 10# CrLf
ok,多谢提醒,0-9的数字被当成句柄了,代码已修改,加了个空格,应该可以吧。
发表于 2011-9-14 09:23:40 | 显示全部楼层
回复 8# CrLf
不知版主是否会错题意,怎么跑你的程序,结果不对呢?
发表于 2011-9-14 09:27:35 | 显示全部楼层
回复 9# awk
还是得感谢awk纠错,多谢!
发表于 2011-9-14 09:30:36 | 显示全部楼层
回复 7# weichenxiehou


    有个小建议,不要在原文的基础上改代码,这样会有一部分人不明白9L是什么意思的!
发表于 2011-9-14 09:33:53 | 显示全部楼层
回复 14# wc726842270
言之有理,原楼代码还原,新代码贴于此:

  1. @echo off&setlocal enabledelayedexpansion
  2. set n=&set odd=
  3. (for /f "delims=" %%i in (a.txt) do (
  4.   set/a n+=1,m=n%%2
  5.   if !m! equ 1 (set "odd=%%i") else echo,%%i&echo,!odd!
  6. ))>new.txt
  7. if %m% equ 1 echo,%odd% >>new.txt
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 11:33 , Processed in 0.029986 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表