Board logo

标题: [文件操作] 【已解决】批处理中echo如何控制输出文本的格式 [打印本页]

作者: sniperhgy    时间: 2009-1-25 18:19     标题: 【已解决】批处理中echo如何控制输出文本的格式

上次请高手编了一个批处理
  1. @echo off & setlocal enabledelayedexpansion
  2. set "table=abcdefghijklmnop"&set i=0
  3. echo ***********************
  4. for /r .\ %%a in (*.exe) do (
  5.         call set a=%%table:~!i!,1%%
  6.         set e!a!="%%a"
  7.         echo *   ^(!a!^)  %%~nxa  *
  8.         set /a i+=1
  9. )
  10. set eq=exit/b
  11. echo *   (q)  Exit         *
  12. echo ***********************
  13. set /p select=Plz choose:
  14. !e%select%!
  15. pause
复制代码
作用是遍历当前目录下的exe文件生成菜单以供调用
现在问题是这样的,生成的菜单:
  1. ***********************
  2. *   (a)  1.exe  *
  3. *   (b)  12.exe  *
  4. *   (c)  123.exe  *
  5. *   (d)  1234.exe  *
  6. *   (e)  12345.exe  *
  7. *   (q)  Exit         *
  8. ***********************
  9. Plz choose:
复制代码
但是我需要的是这样的效果:
  1. **********************
  2. *   (a)  1.exe       *
  3. *   (b)  12.exe      *
  4. *   (c)  123.exe     *
  5. *   (d)  1234.exe    *
  6. *   (e)  12345.exe   *
  7. *   (q)  Exit        *
  8. **********************
  9. Plz choose:
复制代码
问题在于文件名的长度不是一样的,
而且不能改名(改了名就不能运行)
请教知道的朋友要怎样解决?

[ 本帖最后由 sniperhgy 于 2009-1-25 18:23 编辑 ]
作者: 523066680    时间: 2009-1-25 18:58

假定文件名的最大长度,补上一定的长度。

带中文或者长长的 话我就闪得远远的……

一点破玉怎么大家都说砖头?搞得我有更砖的想法都不敢说了)

       思路 演示:
  1. @echo off
  2. for /l %%a in (1,1,30) do (call set k= %%k%%)
  3. set name1=abc.exe%k%
  4. set name2=abcdfdsfasef.exe%k%
  5. echo Name1   * %name1:~0,30% *
  6. echo Name2   * %name2:~0,30% *
  7. pause
复制代码
后面操作改成for  30是固定的 只有编号用for决定

[ 本帖最后由 523066680 于 2009-1-25 19:12 编辑 ]
作者: 523066680    时间: 2009-1-25 19:07

帅哥 我相信这个问题你一定能想到方法的,

   如果你想都没想,请大胆地想象,即使绕了弯路也是一种锻炼,
然后跟大家分享自己的想法,这样才能制造论坛-的讨论气氛,不然全变成求助了。

   如果有做,为什么不贴出来呢?
   或者那不是最好的,又或者绕了弯路,但思路存在,那就有它存在的意义,或许能用来做更实用的程序。

(5230自以为是的一段说法……)

[ 本帖最后由 523066680 于 2009-1-25 19:09 编辑 ]
作者: 523066680    时间: 2009-1-25 19:14

哦 温馨提示 我那是偏方 没通用性……
根据情况 如果文件名都不长 那就在字符之间用 跳格键的符号隔着

那个东西貌似能够自动伸缩,尽量跟其他行匹配  但是长度相差大就不行liao....



(这我刚发的帖子 俺求大哥们来看看吧
http://bbs.bathome.net/thread-3173-1-1.html

[ 本帖最后由 523066680 于 2009-1-25 19:19 编辑 ]
作者: sniperhgy    时间: 2009-1-25 19:22

哭了,这位大哥实在是健谈啊,麻烦还是给出具体代码,谢谢了,我现在真是没有心情研究了,都快急晕了,根本静不下来
作者: sniperhgy    时间: 2009-1-25 19:53

试了半天还是不行啊,麻烦知道的朋友告诉答案,谢谢了
作者: 523066680    时间: 2009-1-25 20:11

好好好…… ……  如果名字太长就不行哦。
我也没细看原来的代码  临时加了两句

如果您觉得可以得给我加1分 谢谢……
  1. @echo off & setlocal enabledelayedexpansion
  2. set "table=abcdefghijklmnop"&set i=0
  3. for /l %%a in (1,1,30) do (set k= !k!)
  4. echo ***********************
  5. for /r .\ %%a in (*.exe) do (
  6.         call set a=%%table:~!i!,1%%
  7.         set e!a!="%%a"
  8.         set temp=%%~nxa%k%
  9.         echo *   ^(!a!^)  !temp:~0,30!  *
  10.         set /a i+=1
  11. )
  12. set eq=exit/b
  13. echo *   (q)  Exit         *
  14. echo ***********************
  15. set /p select=Plz choose:
  16. !e%select%!
  17. pause
复制代码

作者: defanive    时间: 2009-1-25 20:15

  1. @echo off & setlocal enabledelayedexpansion
  2. set "table=abcdefghijklmnop"&set i=0
  3. echo ***********************
  4. for /r .\ %%a in (*.exe) do (
  5. call set a=%%table:~!i!,1%%
  6. set e!a!="%%a"
  7. set "tmp=%%~nxa "
  8. echo * ^(!a!^) !tmp:~0,11! *
  9. set /a i+=1
  10. )
  11. set eq=exit/b
  12. echo * (q) Exit *
  13. echo ***********************
  14. set /p select=Plz choose:
  15. !e%select%!
  16. pause
复制代码

作者: defanive    时间: 2009-1-25 20:17

晕,都发重了。。。
要看到你也写代码了,我就不写了。。。
作者: sniperhgy    时间: 2009-1-25 20:26

同样谢谢defanive,老朋友了,一直都很热心
不过,defanive的代码有问题,不能实现补充
空格的功能


请教:
for /l %%a in (1,1,30) do (set k= !k!)
其中 set k= !k!起了什么作用?


echo *   ^(!a!^)  !temp:~0,30!  *
!temp:~0,30!呢?莫非是某种字符串截取的技术?


[ 本帖最后由 sniperhgy 于 2009-1-25 20:38 编辑 ]
作者: defanive    时间: 2009-1-25 20:37

今天去买了个新电脑哈,舒服死了,都忘记来论坛了。。。
作者: 523066680    时间: 2009-1-25 20:55

我把u盘改造了 一键还原启动盘了 玩了很多dos下的小游戏 很爽
(不用启动windows  原来电脑可以这样玩(*^__^*)
最主要是我电脑没喇叭 但是那个超级玛丽可以发声的 神了,
slore说那个是蜂鸣器发的声)

Re 10 楼:
就是跟截取字符串有关,我再做一次演示哈 这次带说明
  1. @echo off
  2. ::建立8个空格
  3. set "a=        "
  4. ::随便弄两个比较短的字符串
  5. set xa=123
  6. set xb=12345
  7. ::给未知长度字符后面补8个空格
  8. set xa=%xa%%a%
  9. set xb=%xb%%a%
  10. ::不管多长 我就要前面的8个字符
  11. echo -%xa:~0,8%-
  12. echo -%xb:~0,8%-
  13. pause
复制代码


另外,这里可能有你想要知道的东西
http://bbs.bathome.net/thread-3136-1-1.html

可能我文采烂,没人鸟我,真够郁闷。

[ 本帖最后由 523066680 于 2009-1-25 21:03 编辑 ]
作者: defanive    时间: 2009-1-25 21:40

这些。。。
set /? 里面都有写吧。。。
要是连系统的帮助都不看那干脆就别学P了。。。
作者: sniperhgy    时间: 2009-1-25 21:41

谢谢523066680,你写的教程真棒,确实是循序渐进适合我这样的新手看

不过,
for /l %%a in (1,1,30) do (set k= !k!)
其中 set k= !k!起了什么作用?


[ 本帖最后由 sniperhgy 于 2009-1-25 21:47 编辑 ]
作者: 523066680    时间: 2009-1-25 21:57

re 13楼……  额 这个。。。。。。

re 14楼      楼主一定没有看完一本完整的教程
         看到我签名里的连接没有  下载那个精华帖 认真看。
         不出一个月,你就可以把我给菜了。

       这里还是啰嗦下吧: for循环30次 每一次都把变量
    k叠加多一个空格,到末了就30个咯
作者: sniperhgy    时间: 2009-1-25 22:09

for /l %%a in (1,1,30) do (set k= !k!)
这个,知道是循环了30次,但是怎么就变成了每次加一个空格了呢?
作者: 523066680    时间: 2009-1-25 22:15

有请我们伟大的def大哥做解释! 我上网太久挨骂了
作者: defanive    时间: 2009-1-25 23:19

每次都把变量k赋值为" !k!",这样赋值的内容是一个空格加上一次赋值完的内容,空格就越来越多,这样赋值30次,就等于在k前面加30个空格。。。
作者: defanive    时间: 2009-1-25 23:20

话说10L,我的代码没有问题捏。。。
作者: 523066680    时间: 2009-1-26 15:28     标题: 回复 19楼 的帖子

一些字符被省掉了

***********************
* (a) picasaweb-s *
* (b) Heaven7w.ex *
* (c) choice.exe  *
* (d) cmd.exe  *
* (e) mountvol.ex *
* (f) taskkill.ex *
* (g) tasklist.ex *
* (h) telnet.exe  *
* (i) Diyupreg.ex *

作者: Loading    时间: 2009-3-6 02:16

方法很不错,实用,已经采用




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