Board logo

标题: [文本处理] BAT调用文本某一行,如何解决空格问题? [打印本页]

作者: 1005593010    时间: 2014-7-30 07:25     标题: BAT调用文本某一行,如何解决空格问题?

各位大人:
       你们好,之前我提问过一次:http://www.bathome.net/thread-30574-1-1.html
  1. 31-M-01A  第一站  500-LC-04-A00-M1  22  1S2 江苏  
  2. 31-M-01B  第二站  500-LC-04-A00-M2  22  1S2 江苏  
复制代码
一、实现如下:输入里面任意一个都能调用里面的某一行显示在批处理中。
  1. 您查询的信息如下:
  2. 站号:31-M-01A
  3. 站位: 第一站
  4. 代号:500-LC-04-A00-M1
  5. 公里:22
  6. 状态:1S2
  7. 城市:江苏
复制代码
比方说我的状态是 1 S2 而不是1S2  那此时显示就变成了状态是:1      而城市就变成了S2  
中间不能有空格,这个有方案可以解决吗?  谢谢!
作者: CrLf    时间: 2014-7-30 21:48

修改 522235677 的代码如下:
  1. @echo off&setlocal enabledelayedexpansion
  2. :1
  3. set /p str=输入要查询的数据:
  4. echo 您查询的信息如下:
  5. set "a="
  6. for /f "tokens=1,2,3,4,* delims= " %%a in ('cmd/v/c findstr /i /c:"^!str^!" 新建文本文档.txt') do (
  7.         set "a=%%~nxe"
  8.         echo.
  9.         echo 站号:%%a
  10.         echo 站位: %%b
  11.         echo 代号:%%c
  12.         echo 公里:%%d
  13.         for %%z in (%%e) do set "城市=%%z"&set "状态=!a:%%z=!"
  14.         echo 状态:!状态:$=!
  15.         echo 城市:!城市:$=!
  16. )
  17. if not defined a echo 没有记录!
  18. set /p c=输入1继续查询,输入0退出:
  19. if !c! equ 1 cls&goto 1
  20. if !c! equ 0 exit
  21. pause
复制代码

作者: 1005593010    时间: 2014-7-31 21:11

回复 2# CrLf
老大 你好,我的意思是这个样子:
       简单的说:我有一个文本文档里面内容如下:
  1. 31-M-01A  第一站  500-LC-04-A00-M1  22  1 S2 江苏  
  2. 31-M-01B  第二站  500-LC-04-A00-M2  22  1 S2 江苏  
复制代码
使用批处理编写一个查询系统:
一、实现如下:输入里面任意一个都能调用里面的某一行显示在批处理中【重点::这里状态之间1和S2之间是有个空格的
  1. 您查询的信息如下:
  2. 站号:31-M-01A
  3. 站位: 第一站
  4. 代号:500-LC-04-A00-M1
  5. 公里:22
  6. 状态:1 S2
  7. 城市:江苏
复制代码
如果按照
  1. @echo off
  2. :1
  3. set /p str=输入要查询的数据:
  4. echo 您查询的信息如下:
  5. for /f "tokens=1,2,3,4,5,6 delims= " %%a in ('findstr /i "%str%" 新建文本文档.txt') do (set a=1
  6.         echo.
  7.         echo 站号:%%a
  8.         echo 站位: %%b
  9.         echo 代号:%%c
  10.         echo 公里:%%d
  11.         echo 状态:%%e
  12.         echo 城市:%%f
  13. )
  14. if %a% neq 1 echo 没有记录!&set a=
  15. set /p c=输入1继续查询,输入0退出:
  16. if %c% equ 1 cls&goto 1
  17. if %c% equ 0 exit
  18. pause
复制代码
写的话,这个状态是1 城市就变成S2了。如何让这个批处理能够处理这样的空格,让它在状态中显示成 1 S2  而不会把空格后的内容转到下一行? 谢谢!
作者: CrLf    时间: 2014-7-31 22:52

回复 3# 1005593010


    2楼回复的代码不就是照这个意思运行的吗?
作者: 34205    时间: 2015-1-22 20:39

@echo off
Mode con: cols=40 lines=30

:GO
MD temp\
cd temp\
Cls
echo =======说明区========
Echo 批处理实现-For分割-跳过空格-练习
echo =======代码区========


Echo 第1行第1列 第1行第2列 第1行第3列 >测试kong.txt
Echo 第2行第1列 第2行第2列 第2行第3列 >>测试kong.txt
Echo 第3行第1列 第3行第2列 第3行第3列 >>测试kong.txt
echo 开始测试...
for /f "tokens=*" %%i in (测试kong.txt) do echo %%i
echo 以上正确的*分割
Ping -n 2 127.1>nul
for /f "delims=" %%i in (测试kong.txt) do echo %%i
Echo 以上无定义符号分割
Ping -n 2 127.1>nul
for /f  %%i in (测试kong.txt) do echo %%i
Echo 以上无参数分割
Ping -n 2 127.1>nul


set "空格= "
set "tab=        "
for /f "eol=; tokens=1 delims=%空格%%tab%" %%i in (测试kong.txt) do echo %%i
Echo 以上多个命令分割
Ping -n 2 127.1>nul



echo =======退出区=======
:Out
echo.
echo 退出.......
Ping -n 30 127.1>nul
exit /b




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