BATHOME 练习汇总~~1——50
--------------------------------------------------------------------------------
【练习-001】批处理实现两文本同行交替输出
有两个文本如下(实际中并不知道两文本各有多少行):
文本1.txt
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ccccccccccccccccccccccccccccccccccccccc
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
ggggggggggggggggggggggggggggggggggggggg
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
文本2.txt
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
要求用批处理输出如下(两文本交替输出):
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
ccccccccccccccccccccccccccccccccccccccc
iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
ggggggggggggggggggggggggggggggggggggggg
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
要求:
1 尽量不生成临时文件
2 代码要高效
3 代码尽量简洁
目的:
唯一的目的在于共同提高!
--------------------------------------------------------------------------------
显示答案 关闭答案
--------------------------------------------------------------------------------
more:- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('type 11.txt') do (
- set /a m+=1
- set "home!m!=%%a"
- )
- for /f "delims=" %%b in ('type 12.txt') do (
- set /a n+=1
- set "bat!n!=%%b"
- )
- if %m% gtr %n% (
- for /l %%c in (1 1 %m%) do (
- if not "!home%%c!"=="" echo !home%%c!
- if not "!bat%%c!"=="" echo !bat%%c!
- )
- ) else (
- for /l %%d in (1 1 %n%) do (
- if not "!home%%d!"=="" echo !home%%d!
- if not "!bat%%d!"=="" echo !bat%%d!
- )
- )
- pause
复制代码
batman:- @echo off
- for /f "delims=" %%i in (1.txt) do set /a n+=1&call,set "_%%n%%=%%i"
- for /f "delims=" %%i in (2.txt) do set /a m+=1&call,set ".%%m%%=%%i"
- if %n% gtr %m% (set "num=%n%") else (set "num=%m%")
- for /l %%i in (1,1,%num%) do (
- if defined _%%i call,echo %%_%%i%%
- if defined .%%i call,echo %%.%%i%%
- )
- pause>nul
复制代码
pusofalse:- @echo off&setlocal enabledelayedexpansion&set n=-1
- for /f "delims=" %%a in (1.txt) do (
- set/a n+=1
- set flag=
- call :lp %%a
- if not defined flag echo %%a
- )
- :lp
- if "%1" equ "" set/a n+=1
- set m=skip=%n%
- if "%m%" equ "skip=0" set "m="
- for /f "%m% delims=" %%a in (2.txt) do if "%1" neq "" (echo %1&echo %%a&set flag=a&goto :eof) else echo %%a
- if "%1" equ "" pause
复制代码
batman:- @echo off
- set "n=-1"&set "flag=a"
- :begin
- set /a n+=1
- if %n% equ 0 (set "m=") else (set "m=skip=%n%")
- for /f "%m% delims=" %%i in (1.txt) do echo %%i&if defined flag goto next
- set no=a
- :next
- for /f "%m% delims=" %%i in (2.txt) do echo %%i&goto begin
- if not defined no set "flag="&goto begin
- pause>nul
复制代码
batman:- @echo off&setlocal enabledelayedexpansion
- set "num=0"
- for %%a in (1.txt 2.txt) do (
- for /f "delims=" %%i in (%%a) do (
- set /a n+=1
- if !n! gtr !num! set "num=!n!"
- set /p=%%i <nul>>temp.txt
- )
- echo.>>temp.txt&set "n=0"
- )
- :lp
- set /a n+=1
- for /f "tokens=%n%" %%i in (temp.txt) do echo %%i
- if %n% neq %num% goto lp
- del /q temp.txt&pause>nul
复制代码
--------------------------------------------------------------------------------
made by 基拉freedom 2009.8.13
请问 这里显示的答案那种适合新手学习呢?
还有 就是这里能不能给新手解释一下每段代码是什么作用呢?
我还想特别问一下,下面每段代码的意思:- @echo off&setlocal enabledelayedexpansion
- set "num=0"
- for %%a in (1.txt 2.txt) do (
- for /f "delims=" %%i in (%%a) do (
- set /a n+=1
- if !n! gtr !num! set "num=!n!"
- set /p=%%i <nul>>temp.txt
- )
- echo.>>temp.txt&set "n=0"
- )
- :lp
- set /a n+=1
- for /f "tokens=%n%" %%i in (temp.txt) do echo %%i
- if %n% neq %num% goto lp
- del /q temp.txt&pause>nul
复制代码 谢谢 |