[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
  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
复制代码

TOP

回复 5# weichenxiehou


    可以把最后一行放到整个语块之内,用变量延迟输出变量,这样能省一个重定向

TOP

不好意思,手快没考虑清楚...应该是:
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f %%a in ('find /c /v ""^<a.txt') do (
  3.    for /l %%b in (1 2 %%a) do (
  4.       set a=&set b=
  5.       set /p a=
  6.       set /p b=
  7.       echo !b!&echo !a!
  8.    )
  9. ))<a.txt>b.txt
复制代码
如果要修改多个文本,改一下就行了:
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%i in (*.*) do (
  3.    (for /f %%a in ('find /c /v ""^<a.txt') do (
  4.       for /l %%b in (1 2 %%a) do (
  5.          set a=&set b=
  6.          set /p a=
  7.          set /p b=
  8.          echo !b!&echo !a!
  9.       )
  10.    ))<%%i>$
  11.    move $ "%%i"
  12. )
复制代码
findstr 确实是为了兼容空行,但是此处应该直接用 find 获取行数比较简单,我把两种效果的思路搞混了。
至于 setlocal 和 endlocal 则是为了开闭一个临时的变量表用于临时保存变量,避免影响之后的操作。其实也不够严谨,因为无法保证 setlcoal 之前 变量a 和变量b 都为空,所以还是应该直接用 set 清空变量

TOP

返回列表