找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 44469|回复: 22

【练习-011】批处理按要求将字符串分段输出

[复制链接]
发表于 2008-8-9 22:51:48 | 显示全部楼层 |阅读模式
一、要求用批处理随机输出200个字符到1.txt中的一行,内容类同如下:
  1. xh45q3ma+remgofm54sevhrna4g5r8pl9cjardezqjwj3m8itamh0a4itzd6jz8cmrfmibmhr0wmccyb8qnp2qh4rvlwff6yr2ez4eo063u6viy7ppw+nzxaxe8vrm190eei_0dwx5e2kxbds-ae6e96c9_i9glw8mz+uf6uienx9od8bktfnjlwlqu-e1rcj33_+4bz
复制代码
二、要求用批处理将1.txt中的内容按10个字符为一段输出如下面两种形式:
在一行内输出:
  1. xh45q3ma+r emgofm54se vhrna4g5r8 pl9cjardez qjwj3m8ita mh0a4itzd6 jz8cmrfmib mhr
  2. 0wmccyb 8qnp2qh4rv lwff6yr2ez 4eo063u6vi y7ppw+nzxa xe8vrm190e ei_0dwx5e2 kxbds-
  3. ae6e 96c9_i9glw 8mz+uf6uie nx9od8bktf njlwlqu-e1 rcj33_+4bz
复制代码
分行输出:
  1. xh45q3ma+r
  2. emgofm54se
  3. vhrna4g5r8
  4. pl9cjardez
  5. qjwj3m8ita
  6. mh0a4itzd6
  7. jz8cmrfmib
  8. mhr0wmccyb
  9. 8qnp2qh4rv
  10. lwff6yr2ez
  11. 4eo063u6vi
  12. y7ppw+nzxa
  13. xe8vrm190e
  14. ei_0dwx5e2
  15. kxbds-ae6e
  16. 96c9_i9glw
  17. 8mz+uf6uie
  18. nx9od8bktf
  19. njlwlqu-e1
  20. rcj33_+4bz
复制代码
----------------------------------------------------------------------------------------------------------------------------------------------------
要求:代码高效、通用、简洁、不产生临时文件
ps:请老手们将本题留给新手完成

[ 本帖最后由 batman 于 2008-8-9 22:54 编辑 ]
发表于 2008-8-10 00:35:13 | 显示全部楼层
还有个细节问题:
产生的随机字符在什么范围内(主要包括哪些字符)?
发表于 2008-8-10 11:25:16 | 显示全部楼层
来赚一点儿积分,哈哈
@echo off
Setlocal Enabledelayedexpansion
set "str=abcdefghijklmnopqrstuvwxyz1234567890+-_"
for /l %%a in (1 1 200) do (
   set /a "m=!random!%%39"
   call set "var1=%%var1%%%%str:~!m!,1%%"
)
set "var=%var1%"
for /l %%a in (1 1 20) do (
   set "var2=!var:~,10!"
   set /p =!var2! <NUL
   set "var=!var:~10!"
)
echo.&echo.&set "var=%var1%"
for /l %%a in (1 1 20) do (
   set "var2=!var:~,10!"
   echo.!var2!
   set "var=!var:~10!"
)
pause>nul

[ 本帖最后由 more 于 2008-8-10 11:27 编辑 ]

评分

参与人数 1PB +3 收起 理由
batman + 3 随然不是新手,还是要加分鼓励了。

查看全部评分

 楼主| 发表于 2008-8-10 11:29:56 | 显示全部楼层
原帖由 youxi01 于 2008-8-10 00:35 发表
还有个细节问题:
产生的随机字符在什么范围内(主要包括哪些字符)?

只要是字符就可以,当然可以不考虑特殊字符问题了。
发表于 2008-8-10 12:52:27 | 显示全部楼层
  1. @echo off
  2. set /p str=<1.txt
  3. set /p select=1.一行内分节显示 2.分行显示(请选择1-2):
  4. if %select% equ 2 goto fh

  5. :fj
  6. set /p=%str:~,10% <nul
  7. if not "%str:~10%"=="" (set str=%str:~10%&goto fj)
  8. pause>nul&goto end

  9. :fh
  10. echo %str:~,10%
  11. if not "%str:~10%"=="" (set str=%str:~10%&goto fh)
  12. pause>nul
复制代码

评分

参与人数 2PB +12 收起 理由
pusofalse + 4
more + 8

查看全部评分

 楼主| 发表于 2008-8-10 13:51:02 | 显示全部楼层
pause>nul&goto end
这句会出错的,应该改成pause>nul&goto :eof或pause>nul&exit
发表于 2008-8-10 14:48:44 | 显示全部楼层
哦,你的写法规范。不过我这样也不出错呀:goto后面的标签没有定义的话,转至文件尾。
发表于 2008-8-10 15:03:31 | 显示全部楼层

回复 7楼 的帖子

不是转至文件尾部吧,而是找不到标签而出错,会自动退出,虽然都是退出。
 楼主| 发表于 2008-8-11 22:58:48 | 显示全部楼层
原帖由 shqf 于 2008-8-10 12:52 发表
@echo off
set /p str=nul

我认为此贴不能加分,原因如下:
一、书写不规范,不能加分。
二、第一问被略过,不能加分。
三、有错不改,不能加分。
 楼主| 发表于 2008-8-11 22:59:58 | 显示全部楼层
在本人未给出答案前,各位新人都可来一试下身手,本人将视情况一一评述和加分。
发表于 2008-8-11 23:28:04 | 显示全部楼层
为什么我在看到类似问题的时候会感觉无从下手呢?
发表于 2008-8-11 23:35:54 | 显示全部楼层

回复 11楼 的帖子

勇于迈出第一步,解答出此题,你会觉得自己的批处理水平已经上升了一个台阶。
然后,你会越来越喜爱批处理。
set var=123456789
set s=!var:~%n%,1!
这里少了一句给n赋值的语句,%n%为一个小于9的随机数,为何是小于9,因为大于或等于9之后,%var:~9,1%是个空值了。
然后呢,请自己完成。^_^
发表于 2008-8-12 00:57:35 | 显示全部楼层
我也要分
那里错了 原码都改没了
  1. @echo off&Setlocal Enabledelayedexpansion
  2.      set "str=abcdefghijklmnopqrstuvwxyz1234567890+-_"
  3.      for /l %%i in (1 1 200) do set /a "m=!random!%%39" & call set /p=%%str:~!m!,1%%<nul>>1.txt
  4.      set/p str=<1.txt
  5.      for /l %%i in (1 1 20) do call set /p=%%str:~!n!,10%% <nul&call set "%%i=%%str:~!n!,10%%"&set/a n+=10
  6.      echo.
  7.      for /l %%i in (1 1 20) do echo.!%%i!
  8.      pause>nul
复制代码
第一次上的码没了 不知道错在那里
  1. @echo off&Setlocal Enabledelayedexpansion
  2.      set "var=abcdefghijklmnopqrstuvwxyz1234567890+-_"
  3.      for /l %%i in (1 1 200) do set /a "m=!random!%%39"&call set str=!str!%%var:~!m!,1%%
  4.      >1.txt echo %str%
  5.      for /l %%i in (1 1 20) do set /p=!str:~,10! <nul&set "%%i=!str:~,10!"&set "str=!str:~10!"
  6.      echo.
  7.      for /l %%i in (1 1 20) do echo.!%%i!
  8.      pause>nul
复制代码

[ 本帖最后由 terse 于 2008-8-12 14:49 编辑 ]

评分

参与人数 1PB +6 收起 理由
浅默 + 6 精品文章

查看全部评分

 楼主| 发表于 2008-8-12 09:48:43 | 显示全部楼层
原帖由 terse 于 2008-8-12 00:57 发表
我也要分
@echo off&Setlocal Enabledelayedexpansion
     set "var=abcdefghijklmnopqrstuvwxyz1234567890+-_"
     for /l %%i in (1 1 2000) do set /a "m=!random!%%39"&call set str=!str!%%var:~!m!,1%%
...

代码有多处错误,请修改后再拿分。
发表于 2008-8-12 09:59:38 | 显示全部楼层
原帖由 batman 于 2008-8-12 09:48 发表

代码有多处错误,请修改后再拿分。

多处错误?望兄指正。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 01:59 , Processed in 0.022258 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表