标题: [文件操作] 【已解决】批处理中echo如何控制输出文本的格式 [打印本页]
作者: sniperhgy 时间: 2009-1-25 18:19 标题: 【已解决】批处理中echo如何控制输出文本的格式
上次请高手编了一个批处理- @echo off & setlocal enabledelayedexpansion
- set "table=abcdefghijklmnop"&set i=0
- echo ***********************
- for /r .\ %%a in (*.exe) do (
- call set a=%%table:~!i!,1%%
- set e!a!="%%a"
- echo * ^(!a!^) %%~nxa *
- set /a i+=1
- )
- set eq=exit/b
- echo * (q) Exit *
- echo ***********************
- set /p select=Plz choose:
- !e%select%!
- pause
复制代码
作用是遍历当前目录下的exe文件生成菜单以供调用
现在问题是这样的,生成的菜单:- ***********************
- * (a) 1.exe *
- * (b) 12.exe *
- * (c) 123.exe *
- * (d) 1234.exe *
- * (e) 12345.exe *
- * (q) Exit *
- ***********************
- Plz choose:
复制代码
但是我需要的是这样的效果:- **********************
- * (a) 1.exe *
- * (b) 12.exe *
- * (c) 123.exe *
- * (d) 1234.exe *
- * (e) 12345.exe *
- * (q) Exit *
- **********************
- Plz choose:
复制代码
问题在于文件名的长度不是一样的,
而且不能改名(改了名就不能运行)
请教知道的朋友要怎样解决?
[ 本帖最后由 sniperhgy 于 2009-1-25 18:23 编辑 ]
作者: 523066680 时间: 2009-1-25 18:58
假定文件名的最大长度,补上一定的长度。
带中文或者长长的 话我就闪得远远的……
一点破玉怎么大家都说砖头?搞得我有更砖的想法都不敢说了)
思路 演示:- @echo off
- for /l %%a in (1,1,30) do (call set k= %%k%%)
- set name1=abc.exe%k%
- set name2=abcdfdsfasef.exe%k%
- echo Name1 * %name1:~0,30% *
- echo Name2 * %name2:~0,30% *
- 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分 谢谢……- @echo off & setlocal enabledelayedexpansion
- set "table=abcdefghijklmnop"&set i=0
- for /l %%a in (1,1,30) do (set k= !k!)
- echo ***********************
- for /r .\ %%a in (*.exe) do (
- call set a=%%table:~!i!,1%%
- set e!a!="%%a"
- set temp=%%~nxa%k%
- echo * ^(!a!^) !temp:~0,30! *
- set /a i+=1
- )
- set eq=exit/b
- echo * (q) Exit *
- echo ***********************
- set /p select=Plz choose:
- !e%select%!
- pause
复制代码
作者: defanive 时间: 2009-1-25 20:15
- @echo off & setlocal enabledelayedexpansion
- set "table=abcdefghijklmnop"&set i=0
- echo ***********************
- for /r .\ %%a in (*.exe) do (
- call set a=%%table:~!i!,1%%
- set e!a!="%%a"
- set "tmp=%%~nxa "
- echo * ^(!a!^) !tmp:~0,11! *
- set /a i+=1
- )
- set eq=exit/b
- echo * (q) Exit *
- echo ***********************
- set /p select=Plz choose:
- !e%select%!
- 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 楼:
就是跟截取字符串有关,我再做一次演示哈 这次带说明- @echo off
- ::建立8个空格
- set "a= "
-
- ::随便弄两个比较短的字符串
- set xa=123
- set xb=12345
-
- ::给未知长度字符后面补8个空格
- set xa=%xa%%a%
- set xb=%xb%%a%
-
- ::不管多长 我就要前面的8个字符
- echo -%xa:~0,8%-
- echo -%xb:~0,8%-
-
- 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 |