标题: 批处理FOR语句训练:数字排列 [打印本页]
作者: foxJL 时间: 2009-11-18 23:22 标题: 批处理FOR语句训练:数字排列
一组有规律的数字,需要把它们排列成N块。如:
以下是一组数字:
- 01 02 03 04
- 05 06 07 08
- 09 10 11 12
- 13 14 15 16
复制代码
如排成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 16
复制代码
N不是固定的,请问用批处理如何排列这组数字?
作者: vsbat 时间: 2009-11-19 09:59
- @echo off
- setlocal enabledelayedexpansion
- set /p n=请输入块数N:
- for /f "delims=" %%i in (1.txt) do (
- for /l %%j in (1 1 %n%) do set "#s%%i=!#s%%i!%%i ")
- for /f "tokens=2 delims==" %%k in ('set #') do echo %%k
- pause
复制代码
作者: vsbat 时间: 2009-11-19 10:14
- @echo off
- set /p n=请输入N:
- for /f "delims=" %%i in (1.txt) do (
- for /l %%j in (1 1 %n%) do set/p=%%i <nul
- echo.)
- pause
复制代码
作者: foxJL 时间: 2009-11-19 12:41
数字要全部由批处理生成,没有1.txt这个文件。
作者: vsbat 时间: 2009-11-19 13:26
- @echo off
- setlocal enabledelayedexpansion
- set /p h=列数:
- set /p m=行数:
- set /a m=%m%*%h%
- for /l %%i in (1 1 %m%) do (
- set r=0%%i&set r=!r:~-2!
- set/p =!r! <nul>>1.txt&set /a n+=1
- if "!n!"=="!h!" (set n=0&echo\>>1.txt)
- )
复制代码
产生1.txt
[ 本帖最后由 vsbat 于 2009-11-19 15:26 编辑 ]
作者: foxJL 时间: 2009-11-19 13:36
LS的代码好像有点偏题了。
作者: batman 时间: 2009-11-19 14:50
小小提示下,01-16的数字可以由如下方法生成- @echo off&setlocal enabledelayedexpansion
- for /l %%a in (101,1,116) do set "str=%%a"&echo !str:~-2!
- pause>nul
复制代码
作者: vsbat 时间: 2009-11-19 15:23
我是看-----自己的前两个不是把题意误会在不存在1.txt嘛----
所以 索性 造了个适合的txt-----
不过这样的话-----好象太麻烦了
[ 本帖最后由 vsbat 于 2009-11-19 15:27 编辑 ]
作者: Seter 时间: 2009-11-19 21:25
- @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.
- )
- pause
复制代码
我觉得我的代码好xinsho
作者: bamboo 时间: 2009-11-20 11:28
- @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>nul
复制代码
作者: rwxyxy 时间: 2009-11-20 14:22
- @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))
复制代码
作者: ggbb 时间: 2009-12-5 16:34
纯新手- @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>nul
复制代码
作者: lvyaojian 时间: 2009-12-13 22:43
- @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.
- )
- 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
答:
- @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 :eof
复制代码
=================
偶这样好像挺复杂的,米办法,偶系新手
end;
作者: skuny 时间: 2010-12-25 15:17
- @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="
- )
- 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句把它输出来,结果没实现- @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>nul
复制代码
作者: shelluserwlb 时间: 2014-12-24 15:46
- @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>nul
复制代码
作者: shelluserwlb 时间: 2014-12-24 15:48
本帖最后由 shelluserwlb 于 2014-12-24 15:54 编辑
回复 3# vsbat
代码中应尽量不要使用临时文件吧。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |