[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
也是一个比较经典的问题。

for /f 中两个分隔符之间的空值如何表示?
http://bbs.verybat.org/viewthrea ... romuid=37#pid166173
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

再来个更简单的。
  1. @echo off&setlocal enabledelayedexpansion
  2. set Tab= &rem 这个空白换为Tab键
  3. for /f "delims=" %%a in (a.txt) do (
  4. set var=%%a
  5. set var=!var:%Tab%=%Tab%#!%Tab%
  6. set var=!var:#%Tab%=0%Tab%!
  7. set var=!var:#=!
  8. echo !var:~,-1!
  9. )
  10. pause
复制代码
改成这样就不畏惧任何字符了:
  1. @echo off
  2. set Tab= &rem 这个空白换为Tab键
  3. for /f "delims=" %%a in (a.txt) do (
  4. set var=%%a
  5. setlocal enabledelayedexpansion
  6. set var=!var:%Tab%=%Tab%#!%Tab%
  7. set var=!var:#%Tab%=0%Tab%!
  8. set var=!var:%Tab%#=%Tab%!
  9. echo !var:~,-1!
  10. endlocal
  11. )
  12. pause
复制代码

[ 本帖最后由 netbenton 于 2009-6-24 07:48 编辑 ]
3

评分人数

TOP

  1. @echo off & SetLocal enabledelayedexpansion
  2. :: tab 键
  3. set "tab= "
  4. For /f "skip=1 delims=" %%a in (a.txt) do (
  5. set "sString=%%a" & set "sVar="
  6. set "sString=!sString:%tab%=%tab%#!"
  7. set /a n = 0 & call :recur !sString:~1!
  8. )
  9. set _ & Pause & exit /b
  10. :recur
  11. set /a n += 1
  12. For /f "tokens=1* delims=%tab%" %%a in ("%*") do (
  13. set "sVar=%%a" & set "sVar=!sVar:#=!"
  14. If "!sVar!" equ "" ( set "sVar=0" )
  15. set /a _!n! += sVar
  16. If "%%b" neq "" ( call :recur %%b )
  17. )
复制代码
心绪平和,眼藏静谧。

TOP

我也来试试
  1. @echo off&setlocal enabledelayedexpansion
  2. set Tab=        &rem 这个空白换为Tab键
  3. for /f "delims=" %%a in (a.txt) do (
  4.         set var=%%a
  5.         set str=
  6.         for %%b in ("!var:%Tab%=" "!") do (
  7.                 set #%%~b=%%~b
  8.                 set #=0
  9.                 set str=!str!%Tab%!#%%~b!
  10.         )
  11.         echo !str:~1!
  12. )
  13. pause
复制代码

[ 本帖最后由 netbenton 于 2009-6-23 19:24 编辑 ]

TOP

就原文本来解答
  1. @echo off&setlocal enabledelayedexpansion
  2. set "tab=#"&rem 把左边的#号替换为 tab 键
  3. for /f "delims=" %%a in (ss.txt) do (
  4.    set "str=%%a"
  5.    set "str=!str:%tab%%tab%%tab%%tab%=%tab%0%tab%0%tab%0%tab%!"
  6.    set "str=!str:%tab%%tab%%tab%=%tab%0%tab%0%tab%!"
  7.    set "str=!str:%tab%%tab%=%tab%0%tab%!"
  8.    if "!str:~-1!"=="%tab%" set "str=!str:~0,-1!%tab%0"
  9.    echo !str!
  10. )
  11. pause
复制代码
从第一行中提取总列数
  1. @echo off&setlocal enabledelayedexpansion
  2. set "tab= #"&rem 把左边的#号替换为 tab 键
  3. set /p var=<ss.txt
  4. for %%a in (!var!) do (
  5.    set /a n+=1
  6.    for /l %%i in (1 1 !N!) do set t=!t!%tab%&set tt=!tt!%tab%0
  7.    set t!n!=!t!&set t!n!!n!=!tt:~0,-1!
  8.    set t=&set "tt="
  9. )
  10. set /a n-=1
  11. for /f "delims=" %%a in (ss.txt) do (
  12.    set "str=%%a"
  13.    for /l %%i in (!n! -1 2) do (
  14.       for /f "tokens=1,2 delims=/" %%j in ("!t%%i!/!t%%i%%i!") do (
  15.          set "str=!str:%%j=%%k!"
  16.     ))
  17.    if "!str:~-1!"=="%tab%" set "str=!str:~0,-1!%tab%0"
  18.    echo !str!
  19. )
  20. pause
复制代码
技术问题请到论坛发帖求助!

TOP

总列数可以从第一行中提取,如只想就原文本来解答,那就定为5列吧。
***共同提高***

TOP

确定每行最多的是4例吗?连姓名一起是5例。
技术问题请到论坛发帖求助!

TOP

提示下:a.txt中各列间也是以tab来分隔的。
***共同提高***

TOP

返回列表