中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-26 02:17
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [出题]娱乐一下~ 查看 1,950 回复 27
16 发表于 2008-06-20 16:51 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
Originally posted by pusofalse at 2008-6-20 04:43 PM:
两位前辈的思路。。真是太棒了~
虽说出题,但里面有几道题我也不会~
第8楼,hat前辈的第一段代码。。。输出所有以abcd开头的行~ 貌似有点思维定向了~

改变一下思维可以吗?
findstr "^abcd" "a.txt"
17 发表于 2008-06-20 17:46 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
1.因为不会用errorlevel,所以只能用笨办法了。
for /f "delims=" %%a in ('net user^|findstr "123"') do (
for %%i in (%%a) do (
if "%%i" equ "123" set user=123
))
if not defined user net user 123 "123 &^" /add

2.跟hat前辈的完全一样。。
3.for /l %%a in (1000 1 1999) do set var=%%a&>>num.txt call,echo %%var:~1%%

set n=-1
:1
set/a n+=1
set m=0000%n%
>>num.txt echo %m:~-3%
if %n% lss 999 goto 1
pause>nul

4.
call :lp tcp 7
call :lp udp 6
pause&goto :eof
:lp
for /f "skip=4 tokens=3,%2 delims=: " %%a in ('netstat -anop %1') do echo %%a &tasklist /fi "pid eq %%b"

5.又跟HAT前辈想一块去了。。

6.开启5个进程同时ping 进程1ping1-10 进程2 ping 11-20 用start给每个进程传递主机ID的参数。。。当然只ping1次

7。
@echo off
:1
set/a n+=1
if %n% gtr 9 pause>nul&exit
for /l %%a in (1 1 %n%) do call :lp %%a %n%

:lp
set/a res=%1*%2
set/p=%1*%2=%res% <nul
if %1 equ %2 (echo.&goto 1) else goto :eof

8:
不会用sort,再用笨办法- -|||
setlocal enabledelayedexpansion
for /f "delims=" %%a in (1.txt) do set/a n+=1&set !n!=%%a
for /l %%i in (%n% -1 1) do echo !%%i!
pause>nul

9:输入任意字母,然后新建文件,分别以这些个字母命名,然后dir/b/on一下

10.
@echo off
setlocal enabledelayedexpansion
for %%a in (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 z) do (
set/a n+=1
set %%a=!n!
)
set/p var=
for %%a in (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 z) do set var=!var:%%a=%%a !
echo %var%
pause
for %%a in (%var%) do set/a res+=!%%a!
echo %res%
pause>nul
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
18 这是我的解题思路 发表于 2008-06-20 17:48 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
汗。。。我何时发了两次。。。- -|||

[ Last edited by pusofalse on 2008-6-20 at 06:41 PM ]
19 发表于 2008-06-20 21:02 ·  法国 奥弗涅-罗讷-阿尔卑斯 里昂大都会 里昂
高级用户
★★
积分 783
发帖 268
注册 2006-12-26 17:18
19年会员
UID 74627
性别 男
状态 离线
第四题较有挑战性 我单发一帖吧
菩提本无树,明镜亦非台,本来无一物,何处惹尘埃.
20 发表于 2008-06-20 21:13 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
第四题,我觉得必须用pid作为中介。。。不知还有没有别的方法。。。
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
21 发表于 2008-06-21 23:35 ·  中国 福建 三明 电信
中级用户
★★
积分 458
发帖 211
注册 2006-07-26 19:42
19年会员
UID 59307
状态 离线
Q3:输出000-999到num.txt,最少两种方法

只写了一种(通用,max为最大值,改成你要的数字就行。)
@echo off
cd/d %~dp0

cd.>num.txt
set/a n=0
set/a x=1
set/a max=999
set/a num=%max%

:ui
 set/a num/=10
 if not %num% equ 0 set/a x*=10&&call :add_num wx_1&&goto :ui
set/a wx=%wx_1%+1

setlocal enableDelayedExpansion
:show_list
 set nn=%x%%n%
 echo !nn:~-%wx%,%wx%!>>num.txt
 call :add_num n
 if %n% gtr %max% goto :eof
 goto :show_list

:add_num
 set/a %1+=1
 goto :eof
┌───────┐
├→学习→实践→┤
└───────┘
22 发表于 2008-06-21 23:43 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
Originally posted by wxcute at 2008-6-21 23:35:
Q3:输出000-999到num.txt,最少两种方法

只写了一种(通用,max为最大值,改成你要的数字就行。)
@echo off
cd/d %~dp0

cd.>num.txt
set/a n=0
set/a x=1
s ...

我晕,楼上的是不是搞得太复杂了,本来一句命令就可以搞定的,如下:

@echo off&for /l %%i in (1000,1,1999) do set str=%%i&call,echo %%str:~1%%>>num.txt

或者:
@echo off&for /l %%i in (0,1,999) do set str=00%%i&call,echo %%str:~-3%%>>num.txt


[ Last edited by zw19750516 on 2008-6-21 at 11:51 PM ]
批处理之家新域名:www.bathome.net
23 发表于 2008-06-22 12:57 ·  中国 福建 三明 电信
中级用户
★★
积分 458
发帖 211
注册 2006-07-26 19:42
19年会员
UID 59307
状态 离线
回zw19750516
我是想让P自动计算位数,如:

max=9就输出0-9
max=14就输出00-14
max=495就输出000-495
┌───────┐
├→学习→实践→┤
└───────┘
24 发表于 2008-06-22 13:09 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
::输出第一个以abcd开头的行

@echo off
for /f "delims=" %%a in ('findstr "^abcd" a.txt') do (
if not defined flag echo %%a
set flag=%%a
)

::输出第二个以abcd开头的行

@echo off
for /f "delims=" %%a in ('findstr "^abcd" a.txt') do (
if defined flag echo %%a&pause&exit
set flag=%%a
)
pause


Q7:输出九九乘法表

@echo off&set .23= &set ".24= "
for /l %%a in (1,1,9) do (
setlocal enabledelayedexpansion
for /l %%b in (1,1,%%a) do (
set /a h=%%a*%%b
set "m=!m! %%b×%%a=!h!!.%%b%%a!"
)
echo.!m!&endlocal
)
echo\&pause

Q8:倒序输出a.txt中的内容,当a.txt内容位数不一样时就不能用sort了。

@echo off&setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%a in ('findstr /n .* a.txt') do (
set %%a=%%b&set w=%%a
)
for /l %%a in (%w% -1 1) do echo.!%%a!
pause

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

@echo off
set var=a z c f y b
for %%a in (%var%) do set .%%a=a
for /f "delims=.=" %%a in ('set .') do echo %%a
pause

Q10:计算任意字母之和

@echo off&setlocal enabledelayedexpansion
for %%a in (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 z) do (
set /a nnn+=1&set %%a=!nnn!&set .!nnn!=%%a
)
set /a www=%random%%%5+1
for /l %%a in (1 1 %www%) do (
set /a www=!random!%%25+1
call set /a max+=%%.!www!%%
call set num=!num!%%.!www!%%
)
echo 随机生成的字母组为 !num!
echo 字母组的数位和为 !max!
pause>nul
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
pusofalse +5 2008-06-22 16:35
致精致简!
25 发表于 2008-06-22 19:06 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
Originally posted by 26933062 at 2008-6-22 01:09 PM:
Q9:字母排序,输入任意字母,进行排序 如输入z a u i b,则输出 a b i u z
@echo off
set var=a z c f y b
for %%a in (%var%) do set .%%a=a
for /f "delims=.=" %%a in ('set .') do echo %%a
pause



Nice job!
26 发表于 2008-06-23 13:39 ·  中国 山西 电信
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
22年会员
UID 19350
性别 男
状态 离线
Q1:判断系统中有无123用户,无则添加用户名为123,密码为"123 &^"的普通用户
直接利用应用程序自己的错误处理就可以了
net user 123 "123 &^" /add

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

输出a.txt中所有以abcd开头的行
findstr "^abcd" a.txt

输出第一个以abcd开头的行
findstr "^abcd" a.txt>tmp.dat
set /p tmp=<tmp.dat
echo %tmp%

输出第二个以abcd开头的行
for /f "tokens=1* delims=:" %%i in ('findstr "^abcd" a.txt^|findstr /n ".*"^|findstr "^2:"') do echo %%j
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
pusofalse +4 2008-06-23 20:11
27 发表于 2008-06-23 13:56 ·  中国 山西 电信
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
22年会员
UID 19350
性别 男
状态 离线
Q3:输出000-999到num.txt,最少两种方法

for /l %%i in (0,1,9) do for /l %%j in (0,1,9) do for /l %%k in (0,1,9) do echo %%i%%j%%k>>num.txt

if "%1"=="$$$" (>>num.txt echo %2) else (for /l %%i in (0,1,9) do call %0 $%1 %2%%i)

[ Last edited by qzwqzw on 2008-6-23 at 02:02 PM ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
pusofalse +1 2008-06-23 20:12
28 发表于 2008-06-23 14:27 ·  中国 山西 电信
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
22年会员
UID 19350
性别 男
状态 离线
Q4:输入端口号,输出对应进程。如输入135,则输出svchost.exe的详细信息,要求代码同时兼容TCP与UDP端口

for /f "tokens=1-3,*" %%a in ('netstat -ano^|find ":123 "') do echo.%%a %%b %%c & tasklist /v /fi "pid eq %%d"
或者

netstat -ab
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
pusofalse +3 2008-06-23 20:11
论坛跳转: