中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: [出题]娱乐一下~ 上一主题 | 下一主题
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『楼 主』:  [出题]娱乐一下~

10道题,如下,是我从学习批处理以来积攒的几个比较经典的题目,供新手练习,老手复习。有兴趣的可以来做一下~无兴趣的请无视。^_^

Q1:判断系统中有无123用户,无则添加用户名为123,密码为"123 &^"的普通用户

Q2:
a.txt:
abcdefg
123abcd
abcd123
abcdefg
asdfghabcda
1234

输出a.txt中所有以abcd开头的行
输出第一个以abcd开头的行
输出第二个以abcd开头的行


Q3:输出000-999到num.txt,最少两种方法

Q4:输入端口号,输出对应进程。如输入135,则输出svchost.exe的详细信息,要求代码同时兼容TCP与UDP端口

Q5:判断光驱所在的盘符,最少两种方法

Q6:编写批处理,6秒钟内找出局域网内主机ID为1-50之间所有在线的主机,网络ID未知。

Q7:输出九九乘法表

Q8:
倒序输出b.txt中的内容,如b.txt:
a
b
c
d
e
f
g
倒序输出:
g
f
e
d
c
b
a

Q9:字母排序,输入任意字母,进行排序 如输入z a u i b,则输出 a b i u z

Q10:计算任意字母之和,如输出azy,输出52 输入cd,输出7



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-6-19 21:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
WANKOILZ
初级用户





积分 198
发帖 89
注册 2007-9-6
来自 重庆
状态 离线
『第 2 楼』:  

Q8:
@echo off
for /f "tokens=1* delims=:" %%i in ('findstr/n ".*" b.txt^|sort/r') do echo.%%j
pause>nul
[ Last edited by WANKOILZ on 2008-6-19 at 10:31 PM ]

   此帖被 +3 点积分      点击查看详情   
评分人:【 pusofalse 分数: +3  时间:2008-6-19 22:28


2008-6-19 22:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fantakenshin
新手上路





积分 2
发帖 1
注册 2008-6-19
状态 离线
『第 3 楼』:  

新来的

完全不会做的说~~~

2008-6-19 22:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by WANKOILZ at 2008-6-19 10:18 PM:
Q8:
@echo off
for /f "tokens=1* delims=:" %%i in ('findstr/n ".*" b.txt^|sort/r') do echo %%j
pause>nul

高! 用sort排序。。。可惜,我对sort完全不懂~ 集合中为何不直接sort/r b.txt?为何先要读取出行数呢~? 我试了下直接排序完全可以啊~ 也完全可以不用for



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-6-19 22:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
WANKOILZ
初级用户





积分 198
发帖 89
注册 2007-9-6
来自 重庆
状态 离线
『第 5 楼』:  

这样可以显示空行,而直接用sort会忽略空行。

2008-6-19 22:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 6 楼』:  

原来如此~^_^ 谢谢指教~



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-6-19 22:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 7 楼』:  

Q1:判断系统中有无123用户,无则添加用户名为123,密码为"123 &^"的普通用户
@echo off
net user 123 >nul 2>nul
if "%errorlevel%" neq "0" (
  net user 123 "123 &^" /add
)




2008-6-20 08:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 8 楼』:  

Q2:
a.txt:
abcdefg
123abcd
abcd123
abcdefg
asdfghabcda
1234

输出a.txt中所有以abcd开头的行
输出第一个以abcd开头的行
输出第二个以abcd开头的行
@echo off
rem 输出a.txt中所有以abcd开头的行
for /f "delims=" %%a in ('findstr "^abcd" "a.txt"') do (
  echo %%a
)
rem 输出第一个以abcd开头的行
echo.
for /f "delims=" %%a in ('findstr "^abcd" "a.txt"') do (
  echo %%a
  goto :next
)
:next
rem 输出第二个以abcd开头的行
echo.
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('findstr "^abcd" "a.txt"') do (
  set /a row+=1
  if "!row!" equ "2" (
    echo %%a
    goto :eof
  )
)




2008-6-20 08:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 9 楼』:  

Q3:输出000-999到num.txt,最少两种方法
@echo off
type nul>num.txt
for /l %%a in (0,1,999) do (
  if %%a lss 10 (
    >>num.txt echo 00%%a
  ) else if %%a lss 100 (
    >>num.txt echo 0%%a
  ) else (
    >>num.txt echo %%a
  )
)

@echo off
type nul>num.txt
set str=1000
:add
>>num.txt echo %str:~-3%
set /a str+=1
if %str% lss 2000 goto :add




2008-6-20 09:03
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 10 楼』:  

Q5:判断光驱所在的盘符,最少两种方法
@echo off
for %%a in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
  fsutil fsinfo drivetype %%a: | findstr /i "CD">nul && echo 光驱盘符:%%a
)

@echo off
for /f "tokens=2 delims==" %%a in ('wmic LogicalDisk where "DriveType='5'" get * /value ^| findstr /i "^DeviceID"') do echo 光驱盘符:%%a




2008-6-20 09:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 11 楼』:  上来晚了

真高兴又能上联盟了,这阵子生活中真像少了什么东西似的,这下好了。。。
解答Q9,还是用sort快点:
@echo off
set code=abcdefghijklmnopqrstuvwxyz
cd.>temp.txt
:begin
set /a a=%random%%%26
call,set a=%%code:~%a%,1%%
findstr "%a%" temp.txt>nul&&goto begin||echo %a%>>temp.txt
set var=%var% %a%
set /a n+=1
if %n% lss 10 goto begin
echo 排序前为:%var:~1%
echo.
for /f "delims=" %%i in ('sort temp.txt') do call,set str=%%str%% %%i
echo 排序后为:%str:~1%
pause>nul&del temp.txt
[ Last edited by zw19750516 on 2008-6-20 at 11:36 AM ]



批处理之家新域名:www.bathome.net
2008-6-20 10:50
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 12 楼』:  

解答Q7(九九法则表):
@echo off&setlocal enabledelayedexpansion
set "var=+ - * /"
for /f "tokens=1-4 delims= " %%a in ("%var%") do call :lp %%a %%b %%c %%d
pause>nul&goto :eof
:lp
for /l %%i in (1,1,9) do (
    for /l %%j in (1,1,%%i) do (
        set /a a=%%i%1%%j
        if !a! lss 10 set a= !a!
        set str=!str! %%i%1%%j=!a!
        if %%i equ %%j echo !str!&set "str="
    )
)
if "%1" equ "/" goto :eof
shift
goto lp
[ Last edited by zw19750516 on 2008-6-20 at 03:05 PM ]



批处理之家新域名:www.bathome.net
2008-6-20 11:12
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 13 楼』:  

Q10:
@echo off&setlocal enabledelayedexpansion
set codes=a b c d e f g h i j k l m n o p q r s t u v w x y a
set code=%codes: =%
:begin
set /a a=%random%%%26,b=%random%%%10+1
set a=!code:~%a%,1!
echo %var%|findstr "%a%">nul&&goto begin
set var=%var%%a%
set /a n+=1
if %n% lss %b% goto begin
set n=0
echo 随机生成的字母组为:%var%
echo.
:lp
set a=%var:~,1%
set str=%str% %a%
set var=%var:~1%
if defined var goto lp
set str=%str:~1%
for %%a in (%codes%) do (
    call,set /a n+=1
    for %%i in (%str%) do (
        if "%%a" equ "%%i" set /a num+=!n!
    )
)
echo 字母组的数位和为:%num%
pause>nul




批处理之家新域名:www.bathome.net
2008-6-20 12:06
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 14 楼』:  

解答Q6:
@echo off
set t=%time%
for /f "tokens=14-16 delims=:." %%i in ('ipconfig /all^|findstr /c:"IP Address"') do set str=%%i.%%j.%%k.
set str=%str:~1%&arp -d
for /l %%i in (1,1,50) do start /min ping /n 1 %str%%%i>nul
arp -a|findstr "dynamic"
echo %t%
echo %time%
pause>nul
[ Last edited by zw19750516 on 2008-6-20 at 12:53 PM ]



批处理之家新域名:www.bathome.net
2008-6-20 12:25
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 15 楼』:  

两位前辈的思路。。真是太棒了~
虽说出题,但里面有几道题我也不会~
第8楼,hat前辈的第一段代码。。。输出所有以abcd开头的行~ 貌似有点思维定向了~



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-6-20 16:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: