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

[文本处理] [已解决]批处理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
.
.
.
.
.
.
还有很多,但是只显示的第一个

你这里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等等,每种方法都有自己的特点。实际使用时,要根据自己的需要来选择
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

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%
复制代码
1

评分人数

***共同提高***

TOP

2# hanyeguxing

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

TOP

3# batman


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

TOP

5# hucuibai
并不是你调用了一次好不好,根本不存在调用不调用的问题,单一命令的内部的标签确实无用,至于你只看到输出一条是因为执行到你所谓的第一个标签就直接goto :eof了,当然只有显示一个文件啊……
看得多说得多,远比不上写得多。

TOP

6# weichenxiehou


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

TOP

应该像batman那样写。代码中用了gawk,难道gawk不能满足要求吗?

TOP

8# asnahu


gawk不大会用,呵呵!哦哦哦 知道了 标签不能写在for循环里面是吧!!

TOP

3# batman


感谢batman,开始没看清楚!呵呵

TOP

你的括号结束的地方不对,
2个))应该放到 func1: 前面

TOP

11# caruko


恩恩,我知道了,谢谢!

TOP

返回列表