|
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 ]
|
|
2008-6-19 22:18 |
|
|
fantakenshin
新手上路
积分 2
发帖 1
注册 2008-6-19
状态 离线
|
|
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 |
|
|
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 |
|
|
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 |
|
|
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 |
|
|
pusofalse
银牌会员
积分 1604
发帖 646
注册 2008-4-13
状态 离线
|
『第
15 楼』:
两位前辈的思路。。真是太棒了~
虽说出题,但里面有几道题我也不会~
第8楼,hat前辈的第一段代码。。。输出所有以abcd开头的行~ 貌似有点思维定向了~
|
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^ |
|
2008-6-20 16:43 |
|