Board logo

标题: [文本处理] [已解决]批处理call的使用! [打印本页]

作者: hucuibai    时间: 2011-4-18 13:35     标题: [已解决]批处理call的使用!

本帖最后由 hucuibai 于 2011-4-22 17:03 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. for /r F:\123 %%i in (*.txt) do (
  3.         set str=%%~ni
  4.         set str1=!str:~,-8!
  5.             if !str1!==itemrecord (
  6.                  for /l %%a in (1,1,3) do (
  7.                      call :func%%a&pause)
  8. :func1
  9.    echo !str!
  10.   goto :eof
  11. :func2
  12.     echo !str!
  13.   goto :eof
  14. :func3
  15.   echo !str!
  16.    goto :eof
  17. )
  18. )
复制代码
在f:\\123文件夹下的itemrecord文件有很多,为什么只显示一个?
F:\123\gamerecord-chn1033\20110417\itemrecord20110417.txt
F:\123\gamerecord-chn2028\20110417\itemrecord20110417.txt
F:\123\gamerecord-chn2034\20110416\itemrecord20110416.txt
.
.
.
.
.
.
还有很多,但是只显示的第一个
作者: hanyeguxing    时间: 2011-4-18 15:02

你这里call是什么目的呢?发代码前要详细说明代码的目的
  1. @echo off&setlocal enabledelayedexpansion
  2. for /r F:\123 %%i in (*.txt) do (
  3.         set str=%%~ni
  4.         if "itemrecord"=="!str:~0,-8!" echo;%%~fa
  5. )
  6. pause
复制代码
  1. @echo off
  2. for /r %%a in (itemrecord*.txt) do echo;%%~fa
  3. pause
复制代码
还可以使用dir等等,每种方法都有自己的特点。实际使用时,要根据自己的需要来选择
作者: batman    时间: 2011-4-18 15:03

for循环内是不能使用标签的:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /r f:\123 %%a in (*.txt) do (
  3.      set "str=%%~na"
  4.      if "!str:~,-8!" equ "itemrecord" (
  5.          for /l %%a in (1,1,3) do call :func%%a&pause
  6.      )
  7. )
  8. pause>nul&goto :eof
  9. :func1
  10. echo %str%&goto :eof
  11. :func2
  12. echo %str%&goto :eof
  13. :func3
  14. echo %str%
复制代码

作者: hucuibai    时间: 2011-4-18 15:14

2# hanyeguxing

itemrecord*这种文件很大,有不同类型的内容,我是想把相同类型的提取出来做成不同的文件,然后做相应的处理我把我做的脚本传上来你看看,可能是这种方法比较笨,我也想不出别的好的办法了
作者: hucuibai    时间: 2011-4-18 15:17

3# batman


不能用call??可以调用啊,只是这个只能运行一次(for /l %%a in (1,1,3) do ),第二次循环(for /r F:\123 %%i in (*.txt) do)都不行了
作者: weichenxiehou    时间: 2011-4-18 17:31

5# hucuibai
并不是你调用了一次好不好,根本不存在调用不调用的问题,单一命令的内部的标签确实无用,至于你只看到输出一条是因为执行到你所谓的第一个标签就直接goto :eof了,当然只有显示一个文件啊……
作者: hucuibai    时间: 2011-4-18 17:45

6# weichenxiehou


我后面的标签全部都执行了一次!也就是说我那个循环for /l %%a in (1,1,3) do call :func%%a都执行了,只是不能回到前面那个循环
作者: asnahu    时间: 2011-4-18 19:43

应该像batman那样写。代码中用了gawk,难道gawk不能满足要求吗?
作者: hucuibai    时间: 2011-4-19 09:06

8# asnahu


gawk不大会用,呵呵!哦哦哦 知道了 标签不能写在for循环里面是吧!!
作者: hucuibai    时间: 2011-4-19 09:18

3# batman


感谢batman,开始没看清楚!呵呵
作者: caruko    时间: 2011-4-19 09:54

你的括号结束的地方不对,
2个))应该放到 func1: 前面
作者: hucuibai    时间: 2011-4-19 14:43

11# caruko


恩恩,我知道了,谢谢!




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