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

TOP

第一题
  1. @echo off&setlocal enabledelayedexpansion
  2. set "var1=abdefg kmli socsd pdxy nq ABDEFG KMLI SOCSD PDXY NQ"
  3. for %%a in (!var1!) do (
  4.    set /a n+=1,m=n-5
  5.    if !n! leq 5 (set .!n!=%%a) else set "#!m!=%%a"
  6. )
  7. for /l %%l in (1 1 10) do (
  8.    set "num="
  9.    for /l %%a in (1 1 10) do (
  10.       set /a w=!random!%%2,y=!random!%%5+1
  11.       for %%j in (!y!) do if !w! equ 0 (set str=!#%%j!) else set str=!.%%j!
  12.       set num=!num!!str!
  13.    )
  14.    echo !num!
  15. )
  16. pause
复制代码
第二题还真是费了翻脑筋。。
  1. @echo off&setlocal enabledelayedexpansion
  2. set zm=a b c d e f g h i j k l m n o p q r s t u v w x y z
  3. set "var1=ABDEFG"
  4. set "var2=bathome"
  5. set "max=!var1!"
  6. for %%a in (!zm!) do set max=!max:%%a= %%a !
  7. for %%a in (!max!) do set /a n+=1
  8. for /f "delims=" %%a in (a.txt) do (
  9.     set num2=%%a&set "jie="
  10.     set num=!num2:%var1%= %var1% !
  11.     for %%i in (!num!) do (
  12.        if /i not "%%i"=="%var1%" (set jie=!jie!%%i) else (
  13.           set "str=!num2:~0,%n%!"
  14.           if "!str!"=="%var1%" (set jie=!jie!%var2%) else set "jie=!jie!!str!"
  15.         )
  16.         set "num2=!num2:*%%i=!"
  17.      )     
  18.     echo !jie!
  19. )
  20. pause
复制代码

[ 本帖最后由 随风 于 2009-4-23 06:07 编辑 ]
1

评分人数

技术问题请到论坛发帖求助!

TOP

回复 15楼 的帖子

  1. 牛!
  2. set out=%str: =!!% 好晦涩的写法 不仅使我想起了 %var:*"=set "var=%
  3. 它们是兄弟吧 ^_^
  4. 百思不得其解 set out=%str: =!!% 这句是如何替换的?能讲解下吗?
  5. 你好像少写了个空格 (set "str=!str! !ram:~%%a,1! ") 否则第一个字符是数字。
复制代码
.

[ 本帖最后由 随风 于 2009-4-23 06:51 编辑 ]
技术问题请到论坛发帖求助!

TOP

回复 18楼 的帖子

多谢,原来就是把空格替换为 !! 号啊,汗,想多了,反而把最基础的搞忘了。。。
这样也可以
  1. for /l %%a in (1,1,10) do (set "str=!str! ^!!ram:~%%a,1!^!")
  2. echo %str%
复制代码

[ 本帖最后由 随风 于 2009-4-23 08:01 编辑 ]
技术问题请到论坛发帖求助!

TOP

回复 21楼 的帖子

ABDEFGABDEFGabdefgabdefgabdefgABDEFGABDEFGABDEFG
把这行放进去试试
技术问题请到论坛发帖求助!

TOP

回复 24楼 的帖子

你确定你21楼的代码可以?
a.txt 就一行内容
ABDEFGABDEFGabdefgabdefgabdefgABDEFGABDEFGABDEFG
把 ABDEFG 替换为 ------
结果如下:
------ABDEFGabdefgabdefgabdefg------ABDEFG------
技术问题请到论坛发帖求助!

TOP

回复 30楼 的帖子

29楼解的第一题与15楼思路相近,只是最后一个for没看明白,%%0这里必须是0才行,不知道为什么,不理解这个for的运作原理。
1:>a.txt 比 cd.>a.txt 只相差一个字符,却会出现错误提示,不知为何非要这样写?
难道是为了有意晦涩?

30楼 首先解题考虑不周,与21楼犯同样错误,
对 ABDEFGABDEFGabdefgabdefgabdefgABDEFGABDEFGABDEFG 字符串不能准确替换。
其次,效率不够高,也许是为了兼容特殊字符吧(未作详细测试)
总的来说效率还算过得去。
技术问题请到论坛发帖求助!

TOP

回复 36楼 的帖子

多谢zqz001205的链接,预处理一直是一道我无法迈入的门槛,看来看去总是晕晕沉沉的。
但此题我的疑问和预处理好像没什么太大关系,不过看帖的时候却突然灵光一现茅塞顿开。
我知道经过第一个for后com变成了%%6%%4%%1%%2%%1%%8%%2%%3 样字串,
只是没明白for /f "tokens=1-10" %%0 这里取 1-10 的用意,当然也就搞不清 %%0 的作用了。
原来如此简单。。。
汗! 一个主题帖中居然两次对初级问题犯迷糊,惭愧。。。

[ 本帖最后由 随风 于 2009-4-24 15:57 编辑 ]
技术问题请到论坛发帖求助!

TOP

回复 39楼 的帖子

特殊字符是cmd的软肋,无论怎么考虑都很难考虑周全,增加代码量不说对运行效率也有一定影响,
所以一般写bat代码通常不用兼容特殊字符(或是根据实际情况针对性的兼容),
当然若在不明显影响效率的情况下是兼容的越多越好
楼主之所以声明不用考虑特殊字符的原因我想应该也是如此吧
你39楼的代码,再给你下面两个字符串试试?看看都替换成了什么。
ABDEFG!%^@#!ABDEFG!abdefgabdefgabdefgABDEFG
ABDEFG!%^@#!ABDEFGabdefgabdefgabdefgABDEFG
技术问题请到论坛发帖求助!

TOP

回复 42楼 的帖子

新意确实有,但这和预处理好像相关不大,
你说“echo.%com%>>a.txt,并不是像echo %%0、%%1那样显式地出现for的变量,必要经过预处理”
我不这么认为,其实预处理应该在set "com=!com!!``!!r!" 的时候就已经处理了,这应该也是
作者为什么要 set ``=两个%% 而不= 一个 % 号的原因吧。
我认为,其实 echo.%com%>>a.txt 就是和 echo %%0 %%1 %%2 %%3 ..... 是一样的,
只不过这里的数字不是按顺序排列的而是通过前面得到的随机数0-9 ,
而%%0 就是为了保证后面的   %%+数字 能够正确显示,
就象我们要  echo %%b 前面就要定义 %%a 是一个道理。
for 用数字作变量,一直都知道,但始终认为它容易和批处理的参数搞混,
所以个人一直不提倡这种用法,只是没想到在这里却发挥了它的独到作用。
15楼的也是如此。
技术问题请到论坛发帖求助!

TOP

但是不明白为什么要把set/p=%var%<nul>>b.txt&这个&前面的空格去了才是对了,我以前总以为什么空开就是对的。。。。

set /p 后面的所有内容都是提示信息,并不是以<nul终止
测试下面代码便知,变量var的值是a.txt的第一行内容,而1234则为set/p 的提示信息,不在var的值中。
你的代码只是用空设备nul取代了a.txt而以,其他的都一样。
:
  1. @echo off
  2. set /p var=<a.txt 1234
  3. echo;
  4. echo 〔%var%〕
  5. pause
复制代码

又或者
  1. @echo off
  2. set /p var=abcd<a.txt 1234
  3. echo;
  4. echo %var%
  5. pause
复制代码

[ 本帖最后由 随风 于 2009-6-17 17:36 编辑 ]
技术问题请到论坛发帖求助!

TOP

返回列表