|
GOTOmsdos
铂金会员
C++启程者
积分 5154
发帖 1827
注册 2003-7-18
状态 离线
|
『楼 主』:
这两天刚刚做了个简易的DOS浏览器,谁能简化它??
用WBAT和GET作了简易的DOS浏览器,目录和文件越深,DIR后面的数字就越大.
本着数字递增和递减的原理想了很多办法简化它,但由于DOS不能嵌套变量,
(就是不能引用%%1%,%%变量%%), 所以绞尽脑汁还是不行..
谁能有办法?
.....
批处理如下:
@echo off
goto begin
:dirbars "上一级—→"[x]
[退 出]
[预 选]
[看文件]
[看目录]
:
:filebars " 上一级—→"[x]
[退 出]
[运行批处理文件]
[运行可执行文件]
[编辑文本文件]
[查看文件信息]
:
:begin
if exist drive.txt copy drive.txt dir0.txt
if exist dir0.txt goto dir0
wbat box "没有驱动器!" 退出
goto end
:dir0
call w.bat list dir0.txt
if errorlevel 100 goto end
:putdisk
if not exist notready.txt goto dirbar1
find /i "%wbat%" notready.txt
if errorlevel 1 goto dirbar1
wbat box "您还没有在%wbat%盘放入盘片!" 重试
call diskfind
goto putdisk
:dirbar1
set dir1=%wbat%
:dirbars1
wbat box @%0:dirbars
if errorlevel 100 goto dir0
if errorlevel 4 goto dir1
if errorlevel 3 goto flist1
if errorlevel 2 goto pikdir1
goto end
:dir1
dir "%dir1%\" /b/ad/one>dir1.txt
get f dir1.txt
if not "%get%"=="0" goto dir1y
wbat box "没有子目录!" 上一级,退出
if errorlevel 2 goto end
goto dirbars1
:dir1y
call w.bat list dir1.txt
if errorlevel 100 goto dirbars1
set dir2=%dir1%\%wbat%
:dirbars2
wbat box @%0:dirbars
if errorlevel 100 goto dir1y
if errorlevel 4 goto dir2
if errorlevel 3 goto flist2
if errorlevel 2 goto pikdir2
goto end
:flist1
dir "%dir1%" /b/a-d/one>flist1.txt
get f flist1.txt
if not "%get%"=="0" goto flist1y
wbat box "没有文件!" 上一级,退出
if errorlevel 2 goto end
goto dirbars1
:flist1y
call w.bat list flist1.txt
if errorlevel 100 goto dirbars1
:fbars1
wbat box @%0:filebars
if errorlevel 100 goto flist1y
if errorlevel 5 goto info1
if errorlevel 4 goto text1
if errorlevel 3 goto exec1
if errorlevel 2 goto bat1
goto end
:info1
dir "%dir1%\%wbat%" /a>info1.txt
wbat list info1.txt
goto fbars1
:text1
edit "%dir1%\%wbat%"
goto fbars1
:exec1
"%dir1%\%wbat%"
goto fbars1
:bat1
call "%dir1%\%wbat%"
goto fbars1
:pikdir1
set gamesave=%dir1%
goto end
:dir2
dir "%dir2%" /b/ad/one>dir2.txt
get f dir2.txt
if not "%get%"=="0" goto dir2y
wbat box "没有子目录!" 上一级,退出
if errorlevel 2 goto end
goto dirbars2
:dir2y
call w.bat list dir2.txt
if errorlevel 100 goto dirbars2
set dir3=%dir2%\%wbat%
:dirbars3
wbat box @%0:dirbars
if errorlevel 100 goto dir2y
if errorlevel 4 goto dir3
if errorlevel 3 goto flist3
if errorlevel 2 goto pikdir3
goto end
:flist2
dir "%dir2%" /b/a-d/one>flist2.txt
get f flist2.txt
if not "%get%"=="0" goto flist2y
wbat box "没有文件!" 上一级,退出
if errorlevel 2 goto end
goto dirbars2
:flist2y
call w.bat list flist2.txt
if errorlevel 100 goto dirbars2
:fbars2
wbat box @%0:filebars
if errorlevel 100 goto flist2y
if errorlevel 5 goto info2
if errorlevel 4 goto text2
if errorlevel 3 goto exec2
if errorlevel 2 goto bat2
goto end
:info2
dir "%dir2%\%wbat%" /a>info2.txt
wbat list info2.txt
goto fbars2
:text2
edit "%dir2%\%wbat%"
goto fbars2
:exec2
"%dir2%\%wbat%"
goto fbars2
:bat2
call "%dir2%\%wbat%"
goto fbars2
:pikdir2
set gamesave=%dir2%
goto end
:dir3
dir "%dir3%" /b/ad/one>dir3.txt
get f dir3.txt
if not "%get%"=="0" goto dir3y
wbat box "没有子目录!" 上一级,退出
if errorlevel 2 goto end
goto dirbars3
:dir3y
call w.bat list dir3.txt
if errorlevel 100 goto dirbars3
set dir4=%dir3%\%wbat%
:dirbars4
wbat box @%0:dirbars
if errorlevel 100 goto dir3y
if errorlevel 4 goto dir4
if errorlevel 3 goto flist4
if errorlevel 2 goto pikdir4
goto end
:flist3
dir "%dir3%" /b/a-d/one>flist3.txt
get f flist3.txt
if not "%get%"=="0" goto flist3y
wbat box "没有文件!" 上一级,退出
if errorlevel 2 goto end
goto dirbars3
:flist3y
call w.bat list flist3.txt
if errorlevel 100 goto dirbars3
:fbars3
wbat box @%0:filebars
if errorlevel 100 goto flist3y
if errorlevel 5 goto info3
if errorlevel 4 goto text3
if errorlevel 3 goto exec3
if errorlevel 2 goto bat3
goto end
:info3
dir "%dir3%\%wbat%" /a>info3.txt
wbat list info3.txt
goto fbars3
:text3
edit "%dir3%\%wbat%"
goto fbars3
:exec3
"%dir3%\%wbat%"
goto fbars3
:bat3
call "%dir3%\%wbat%"
goto fbars3
:pikdir3
set gamesave=%dir3%
goto end
...
...
:end
[此贴子已经被作者于2005-4-28 13:02:07编辑过]
|
|
2005-4-27 00:00 |
|
|
GOTOmsdos
铂金会员
C++启程者
积分 5154
发帖 1827
注册 2003-7-18
状态 离线
|
『第
2 楼』:
看了WILLSORT帖子,感觉好象能解决了!正在改。。
|
|
2005-4-27 00:00 |
|
|
9zhmke
中级用户
积分 355
发帖 99
注册 2003-1-6
状态 离线
|
|
2005-5-12 00:00 |
|
|
GOTOmsdos
铂金会员
C++启程者
积分 5154
发帖 1827
注册 2003-7-18
状态 离线
|
『第
4 楼』:
已经用GET简化完成! 如下:用递增和递减实现前进和返回的简易DOS浏览器,<感谢willsort!,是他帮我解决了DOS的嵌套变量,才能把它精简>小到只有3KB,但可查看无限制深度的目录@echo off
goto begin:dirbars "上一级—→"[x][退 出][预 选][看文件][看目录]
::filebars " 上一级—→"[x][退 出][运行批处理文件][运行可执行文件][编辑文本文件][查看文件信息]
::begin
if exist drive.txt goto drive
wbat cls ! box "没有驱动器!" 退出
goto end:drive
call w.bat list drive.txt
if errorlevel 100 goto end:putdisk
if not exist notready.txt goto init1
find /i "%wbat%" notready.txt>nul
if errorlevel 1 goto init1
wbat box "您还没有在%wbat%盘放入盘片!" 重试,返回
if errorlevel 2 goto end
call diskfind
goto putdisk:init1
set get=1
set dir%get%=%wbat%:dirb
wbat box @%0:dirbars
if errorlevel 100 goto sub1
if errorlevel 4 goto dir
if errorlevel 3 goto file
if errorlevel 2 goto pick
goto end:dir
if %get%==0 goto drive
if %get%==1 goto rootdir
echo dir "%%dir%get%%%" /b/ad/one %%"%%>%%"%% put.nst>nestvar.bat
call nestvar
goto subdir:rootdir
dir %dir1%\ /b/ad/one>put.nst:subdir
get f put.nst /vfsize>nul
if not "%fsize%"=="0" goto havedir
wbat box "没有子目录!" 上一级,退出
if errorlevel 2 goto end
goto dirb:havedir
call w.bat list put.nst
if errorlevel 100 goto dirb
get r "+" %get% /w1 /vgetadd1>nul
echo set dir%getadd1%=%%dir%get%%%\%wbat%>nestvar.bat
call nestvar
wbat box @%0:dirbars
if errorlevel 100 goto havedir
if errorlevel 4 goto diradd1
if errorlevel 3 goto fileadd1
if errorlevel 2 goto pickadd1
goto end:file
if %get%==1 goto rootfile
echo dir "%%dir%get%%%" /b/a-d/one %%"%%>%%"%% put.nst>nestvar.bat
call nestvar
goto subfile:rootfile
dir %dir1%\ /b/a-d/one>put.nst:subfile
get f put.nst /vfsize>nul
if not "%fsize%"=="0" goto havefile
wbat box "没有文件!" 上一级,退出
if errorlevel 2 goto end
goto dirb:havefile
call w.bat list put.nst
if errorlevel 100 goto dirb:fileb
wbat cls ! text 24,2 (red on blue) @continue.bat:studio
wbat box @%0:filebars
if errorlevel 100 goto havefile
if errorlevel 5 goto info
if errorlevel 4 goto text
if errorlevel 3 goto exec-bat
if errorlevel 2 goto exec-bat
goto end:info
echo dir "%%dir%get%%%\%wbat%" /a %%"%%>%%"%% putfile.nst>nestvar.bat
call nestvar
wbat list putfile.nst
goto fileb:text
echo edit "%%dir%get%%%\%wbat%">nestvar.bat
call nestvar
goto fileb:exec-bat
echo "%%dir%get%%%\%wbat%">nestvar.bat
wbat cls
call nestvar
goto fileb:pick
echo set %1=%%dir%get%%%>nestvar.bat
call nestvar
goto end:sub1
get r "-" %get% /w1>nul
goto dir:diradd1
get r "+" %get% /w1>nul
goto dir:fileadd1
get r "+" %get% /w1>nul
goto file:pickadd1
get r "+" %get% /w1>nul
goto pick:end
for %%a in (nestvar.bat put.nst putfile.nst) do if exist %%a del %%a
|
|
2005-5-12 00:00 |
|
|
9zhmke
中级用户
积分 355
发帖 99
注册 2003-1-6
状态 离线
|
『第
5 楼』:
还可以精简,类似的几偿东西都可以精简,比如最后面的get r "+" %....这段,可以把后面的goto xxx 的XXX改成变量。一个句子就可以完成。
|
|
2005-5-13 00:00 |
|
|
GOTOmsdos
铂金会员
C++启程者
积分 5154
发帖 1827
注册 2003-7-18
状态 离线
|
『第
6 楼』:
后面的3句GET 是一样,但GOTO到不同的地方,就这3句,你再用几个变量,反而烦琐了!
|
|
2005-5-13 00:00 |
|
|