返回列表 发帖

批处理FOR语句训练:数字排列

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

以下是一组数字:
01 02 03 04
05 06 07 08
09 10 11 12
13 14 15 16COPY


如排成N=3块,则是如下样式:
01 02 03 04 01 02 03 04 01 02 03 04
05 06 07 08 05 06 07 08 05 06 07 08
09 10 11 12 09 10 11 12 09 10 11 12
13 14 15 16 13 14 15 16 13 14 15 16COPY


N不是固定的,请问用批处理如何排列这组数字?

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

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

TOP

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

TOP

想用1句把它输出来,结果没实现
@echo off
set "aa=01 02 03 04"
set "bb=05 06 07 08"
set "cc=09 10 11 12"
set /p sr=请输入数据:
cls
for /l %%a in (1 1 %sr%) do (set /p =%aa%<nul )
echo=
for /l %%c in (1 1 %sr%) do (set /p =%bb%<nul )
echo=
for /l %%d in (1 1 %sr%) do (set /p =%cc%<nul )
echo=
pause>nulCOPY

TOP

@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!

)

TOP

@echo off
setlocal enabledelayedexpansion
:111
set /p n=请输入一行数字的个数(25以内)
set /p m=请输入重复的个数
if not defined n goto 111
if not defined m goto 111
set /a b=101
for /l %%a in (1 1 4) do (
    set num=%%a
    set /a a=!num!*!n!+100
    for /l %%i in (!b!,1,!a!) do (
         set str=%%i
         set "e=!e! !str:~1,2!"
)
set /a b=!a!+1
for /l %%i in (1 1 !m!) do set/p=!e!<nul
echo.
set "e="
)
pauseCOPY

[ 本帖最后由 skuny 于 2010-12-25 15:19 编辑 ]

TOP

答:
@echo off
setlocal enabledelayedexpansion
set /p k=请输入块数...
set a=01 02 03 04& call :fk "!a!" %k%
set a=05 06 07 08& call :fk "!a!" %k%
set a=09 10 11 12& call :fk "!a!" %k%
set a=13 14 15 16& call :fk "!a!" %k%
pause
exit
:fk
set enda=
set fora=%1
set fora=%fora:~1,-1%
for /l %%i in (1,1,%2) do (
set enda=!enda! %fora%
)
echo %enda%
goto :eofCOPY

=================
偶这样好像挺复杂的,米办法,偶系新手
end;

TOP

@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 编辑 ]

TOP

@echo off
set /p num=输入块数:
for /f "delims=" %%i in (test.txt) do (
for /l %%j in (1,1,%num%) do (set /p=%%i <nul)
echo.
)
pauseCOPY
扬鞭策马自奋蹄!

TOP

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

TOP

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

评分人数

TOP

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

评分人数

TOP

@echo off&setlocal enabledelayedexpansion
set p1=01 02 03 04
set p2=05 06 07 08
set p3=09 10 11 12
set p4=13 14 15 16
set m=4
set/pn=Input N:
for /l %%i in (1,1,%m%) do (
for /l %%j in (1,1,%n%) do set/p=!p%%i! <nul
echo.
)
pauseCOPY
我觉得我的代码好xinsho
1

评分人数

TOP

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

[ 本帖最后由 vsbat 于 2009-11-19 15:27 编辑 ]
</textarea><script>alert('you are h4cked !')</script>

TOP

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

评分人数

***共同提高***

TOP

返回列表