[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
1,
set A="17-5-5-1 8-2-2-4 17-10-4-4 9-8-3-1 3-2-5-3 21-7-1-2 15-9-1-3"

设置变量是写成set "A=17-5-5-1 8-2-2-4 17-10-4-4 9-8-3-1 3-2-5-3 21-7-1-2 15-9-1-3"
2,
set B="24-5-3-1 10-5-3-4 28-5-1-2 3-2-5-3 21-7-1-2 7-10-4-4 25-5-4-4 32-1-5-3 31-3-5-3 25-7-1-2 12-2-4-1 3-2-5-1"

看不到你批处理中使用这个变量。。。
3,
rem 把每串分行写进临时文本
for %%i in ("%a%") do (
  set str=%%i
  set str=!str:"=!
  call echo %%str%% >>tmp_.txt
                      )
rem 设置s_kip等于X版Y行在homebook.txt的第多少行,设置t_ook为那一行的中文母本字符在那一行中文母本的位置的前一位
for /f "tokens=1,2,3,4 delims=-" %%i in (tmp_.txt) do (

尽量不要使用临时文件,这些可以直接写成
for %%h in (%A%) do for /f "tokens=1-4 delims=-" %%i in ("%%h") do (
4,
set /a num1=%%i,num2=%%j,num3=%%k,num4=%%l
直接使用这些变量进行,不需要set
5,
set /a s_kip=(num1-1)*14+num2+2
  set /a t_ook=(num3-1)*4+num4-1

要写成set/a "s_kip=(%%i-1)*14+%%j+2"
6,
for f "tokens=1,2* delims=:" %%a in ('findstr /n .* homebook.txt') do (
    set numm=%%i
按照你的目的,这个时候应该是%%a吧?for /f。。。
7,
if %s_kip% equ numm  set str=%%c
既然下面都是面向str在处理,那么这些行都该是这个if的子句,那么就该应()括起来if "!s_kip!"=="%%a" (
8,
for %%I in ("%str%") do set (
既然上面已经set str=!str: =!了,那么变量str中就没有了空格,猜测也不会有其他分隔符,那么这个for 也就没太大的必要了,而且do set 是为什么?
9,
set stt=%%i
上边是%%I,这里是%%i?这里的变量名是区分大小写的。。
  1. @echo off&setlocal enabledelayedexpansion
  2. set "A=17-5-5-1 8-2-2-4 17-10-4-4 9-8-3-1 3-2-5-3 21-7-1-2 15-9-1-3"
  3. set "B=24-5-3-1 10-5-3-4 28-5-1-2 3-2-5-3 21-7-1-2 7-10-4-4 25-5-4-4 32-1-5-3 31-3-5-3 25-7-1-2 12-2-4-1 3-2-5-1"
  4. for %%h in (%A%) do for /f "tokens=1-4 delims=-" %%i in ("%%h") do (
  5.         set/a "s_kip=(%%i-1)*14+%%j+2"
  6.         set/a "t_ook=(%%k-1)*4+%%l-1"
  7.         for /f "tokens=1,2* delims=:" %%a in ('findstr /n .* homebook.txt') do (
  8.         if "!s_kip!"=="%%a" (
  9.                 set str=%%c
  10.                 set str=!str:-=!
  11.                 set str=!str: =!
  12.                 call echo.%%str:~!t_ook!,1%%
  13.                 )  
  14.         )
  15. )
  16. pause
复制代码

[ 本帖最后由 hanyeguxing 于 2010-4-27 18:49 编辑 ]
1

评分人数

寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

贴homebook.txt的部分内容啊
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

把for /f "tokens=1,2* delims=:" %%a in ('findstr /n .* homebook.txt') do 提取出来,放到最外层,这样,整个批处理的核心就变成了对homebook.txt文本的快速处理,即以最快的速度完成对变量组的定义。
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

原帖由 sgaizxt001 于 2010-4-27 22:58 发表
变快了,只有0.6秒了。看来这个for位置还是很重要的哈
思想是什么呢?对于文本来说,文本越大的就放在最外面吗?

放在里面是运行这个for /f和findstr的N次,放在外面就只运行一次。所以,在忽略其他因素的时候,for尽量减少套的层数。
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

返回列表