Board logo

标题: 批处理FOR语句训练:数字排列 [打印本页]

作者: foxJL    时间: 2009-11-18 23:22     标题: 批处理FOR语句训练:数字排列

一组有规律的数字,需要把它们排列成N块。如:

以下是一组数字:
  1. 01 02 03 04
  2. 05 06 07 08
  3. 09 10 11 12
  4. 13 14 15 16
复制代码


如排成N=3块,则是如下样式:
  1. 01 02 03 04 01 02 03 04 01 02 03 04
  2. 05 06 07 08 05 06 07 08 05 06 07 08
  3. 09 10 11 12 09 10 11 12 09 10 11 12
  4. 13 14 15 16 13 14 15 16 13 14 15 16
复制代码


N不是固定的,请问用批处理如何排列这组数字?
作者: vsbat    时间: 2009-11-19 09:59

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p n=请输入块数N:
  4. for /f "delims=" %%i in (1.txt) do (
  5. for /l %%j in (1 1 %n%) do set "#s%%i=!#s%%i!%%i ")
  6. for /f "tokens=2 delims==" %%k in ('set #') do echo %%k
  7. pause
复制代码

作者: vsbat    时间: 2009-11-19 10:14

  1. @echo off
  2. set /p  n=请输入N:
  3. for /f "delims=" %%i in (1.txt) do (
  4. for /l %%j in (1 1 %n%) do set/p=%%i <nul
  5. echo.)
  6. pause
复制代码

作者: foxJL    时间: 2009-11-19 12:41

数字要全部由批处理生成,没有1.txt这个文件。
作者: vsbat    时间: 2009-11-19 13:26

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p h=列数:
  4. set /p m=行数:
  5. set /a m=%m%*%h%
  6. for /l %%i in (1 1 %m%) do (
  7. set r=0%%i&set r=!r:~-2!
  8. set/p =!r! <nul>>1.txt&set /a n+=1
  9. if "!n!"=="!h!"  (set n=0&echo\>>1.txt)
  10. )
复制代码
产生1.txt

[ 本帖最后由 vsbat 于 2009-11-19 15:26 编辑 ]
作者: foxJL    时间: 2009-11-19 13:36

LS的代码好像有点偏题了。
作者: batman    时间: 2009-11-19 14:50

小小提示下,01-16的数字可以由如下方法生成
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (101,1,116) do set "str=%%a"&echo !str:~-2!
  3. pause>nul
复制代码

作者: vsbat    时间: 2009-11-19 15:23

我是看-----自己的前两个不是把题意误会在不存在1.txt嘛----
所以 索性 造了个适合的txt-----
不过这样的话-----好象太麻烦了

[ 本帖最后由 vsbat 于 2009-11-19 15:27 编辑 ]
作者: Seter    时间: 2009-11-19 21:25

  1. @echo off&setlocal enabledelayedexpansion
  2. set p1=01 02 03 04
  3. set p2=05 06 07 08
  4. set p3=09 10 11 12
  5. set p4=13 14 15 16
  6. set m=4
  7. set/pn=Input N:
  8. for /l %%i in (1,1,%m%) do (
  9. for /l %%j in (1,1,%n%) do set/p=!p%%i! <nul
  10. echo.
  11. )
  12. pause
复制代码
我觉得我的代码好xinsho
作者: bamboo    时间: 2009-11-20 11:28

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p input=请输入重复显示次数:
  4. set /a times=%input%
  5. for /f "tokens=*" %%a in (test.txt) do (
  6. for /l %%A in (1 1 %times%) do (
  7. rem 我的想法是如何将字符串合并后一起输出,可惜没有办法实现
  8. rem 输出语句来自3楼 呵呵..
  9. set /p =%%a <nul
  10. )
  11. echo.
  12. )
  13. pause>nul
复制代码

作者: rwxyxy    时间: 2009-11-20 14:22

  1. @echo off&setlocal enabledelayedexpansion
  2. set /p a=请输入行数:(10以内的正整数)
  3. set /p b=请输入列数:(10以内的正整数)
  4. set /p N=请输入排列块数:
  5. set /a s=%a%*%b%
  6. for /l %%i in (101,1,1%s%) do (
  7.     set /a sum+=1&set t=%%i
  8.     set out=!out! !t:~-2!
  9.     if !sum! EQU %b% (
  10.         for /L %%j in (1,1,%N%) do (set /p=!out! <nul)
  11.   echo.&set "out="&set /a sum=0))
复制代码

作者: ggbb    时间: 2009-12-5 16:34

纯新手
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set/p n=输入N
  4. set a=01 02 03 04
  5. set b=05 06 07 08
  6. set c=09 10 11 12
  7. set d=13 14 15 16
  8. for /l %%i in (0,1,%n%) do (set/p=!a! <nul)
  9. echo.
  10. for /l %%i in (0,1,%n%) do (set/p=!b! <nul)
  11. echo.
  12. for /l %%i in (0,1,%n%) do (set/p=!c! <nul)
  13. echo.
  14. for /l %%i in (0,1,%n%) do (set/p=!d! <nul)
  15. pause>nul
复制代码

作者: lvyaojian    时间: 2009-12-13 22:43

  1. @echo off
  2. set /p num=输入块数:
  3. for /f "delims=" %%i in (test.txt) do (
  4. for /l %%j in (1,1,%num%) do (set /p=%%i <nul)
  5. echo.
  6. )
  7. pause
复制代码

作者: ccr438758900    时间: 2009-12-23 19:03

@echo off
setlocal enabledelayedexpansion
set /p c=输入块数:
:a
if !c! gtr 6 (set d=6) else (set d=!c!)
set /a a=1,b=4
for /l %%i in (1 1 4) do (
for /l %%j in (1 1 !d!) do (
for /l %%k in (!a! 1 !b!) do (if %%k leq 9 (set /p=0%%k <nul
) else (set /p=%%k <nul)))
set /a a+=4,b+=4&echo.)
echo.
if !c! gtr 6 (set /a c=!c!-6&goto a) else (pause>nul)

[ 本帖最后由 ccr438758900 于 2009-12-25 17:08 编辑 ]
作者: poxi    时间: 2010-7-19 20:27

答:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p k=请输入块数...
  4. set a=01 02 03 04& call :fk "!a!" %k%
  5. set a=05 06 07 08& call :fk "!a!" %k%
  6. set a=09 10 11 12& call :fk "!a!" %k%
  7. set a=13 14 15 16& call :fk "!a!" %k%
  8. pause
  9. exit
  10. :fk
  11. set enda=
  12. set fora=%1
  13. set fora=%fora:~1,-1%
  14. for /l %%i in (1,1,%2) do (
  15. set enda=!enda! %fora%
  16. )
  17. echo %enda%
  18. goto :eof
复制代码

=================
偶这样好像挺复杂的,米办法,偶系新手
end;
作者: skuny    时间: 2010-12-25 15:17

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :111
  4. set /p n=请输入一行数字的个数(25以内)
  5. set /p m=请输入重复的个数
  6. if not defined n goto 111
  7. if not defined m goto 111
  8. set /a b=101
  9. for /l %%a in (1 1 4) do (
  10.     set num=%%a
  11.     set /a a=!num!*!n!+100
  12.     for /l %%i in (!b!,1,!a!) do (
  13.          set str=%%i
  14.          set "e=!e! !str:~1,2!"
  15. )
  16. set /a b=!a!+1
  17. for /l %%i in (1 1 !m!) do set/p=!e!<nul
  18. echo.
  19. set "e="
  20. )
  21. pause
复制代码

[ 本帖最后由 skuny 于 2010-12-25 15:19 编辑 ]
作者: zpp    时间: 2013-2-1 16:47

@echo off

setlocal enabledelayedexpansion

set /p n=请输入块数N:

for /f "delims=" %%i in (1.txt) do (

set a=

for /l %%j in (1 1 %n%) do set a=!a! %%i

echo !a!

)
作者: ann    时间: 2014-12-22 19:09

想用1句把它输出来,结果没实现
  1. @echo off
  2. set "aa=01 02 03 04"
  3. set "bb=05 06 07 08"
  4. set "cc=09 10 11 12"
  5. set /p sr=请输入数据:
  6. cls
  7. for /l %%a in (1 1 %sr%) do (set /p =%aa%<nul )
  8. echo=
  9. for /l %%c in (1 1 %sr%) do (set /p =%bb%<nul )
  10. echo=
  11. for /l %%d in (1 1 %sr%) do (set /p =%cc%<nul )
  12. echo=
  13. pause>nul
复制代码

作者: shelluserwlb    时间: 2014-12-24 15:46

  1. @echo off
  2. set "a=01 02 03 04" & set "b=05 06 07 08"
  3. set "c=09 10 11 12" & set "d=13 14 15 16"
  4. set "str=abcd" & set /a n=0  
  5. set /p ncount=请输入列数:
  6. :again
  7. call call set "s=%%%%str:~%n%,1%%%%"
  8. for /l %%i in (1,1,%ncount%) do (call set /p=%%%s%%% <nul)
  9. echo. & set /a n+=1
  10. if %n% lss 4 goto :again
  11. pause>nul
复制代码

作者: shelluserwlb    时间: 2014-12-24 15:48

本帖最后由 shelluserwlb 于 2014-12-24 15:54 编辑

回复 3# vsbat
代码中应尽量不要使用临时文件吧。




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