中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]如何获取硬盘最后一个分区,并建立文件夹?
作者:
标题: [求助]如何获取硬盘最后一个分区,并建立文件夹? 上一主题 | 下一主题
enginex
新手上路





积分 6
发帖 2
注册 2007-6-24
状态 离线
『楼 主』:  [求助]如何获取硬盘最后一个分区,并建立文件夹?

如题;我想知道如何获取硬盘上的最后一个分区;然后建立一个文件夹;西谢谢大家帮忙啦~~

2008-8-11 09:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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


@echo off
for /f %%a in ('"wmic logicaldisk where DriveType="3" get DeviceID |find /v "DeviceID""') do set lastdrive=%%a
echo CMD 下最后分区盘符是 %lastdrive%
md "%lastdrive%\我是文件夹"




2008-8-11 10:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
enginex
新手上路





积分 6
发帖 2
注册 2007-6-24
状态 离线
『第 3 楼』:  

谢谢楼上的老大~~3Q~~

2008-8-11 10:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
keen
初级用户





积分 58
发帖 29
注册 2008-8-15
状态 离线
『第 4 楼』:  

2楼给出的答案就是牛!

2008-8-16 17:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
181801669
初级用户





积分 58
发帖 27
注册 2006-12-7
状态 离线
『第 5 楼』:  

又学到了一点东东

2008-8-16 21:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kennyfan
中级用户




积分 259
发帖 112
注册 2006-9-18
状态 离线
『第 6 楼』:  

这点新东西有点意思!

2008-8-17 12:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
borly
初级用户




积分 114
发帖 7
注册 2004-5-14
状态 离线
『第 7 楼』:  

二楼不愧是金牌会员,批处理太捧了.

2008-8-17 14:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
haiou327
高级用户

DOS时空


积分 713
发帖 348
注册 2007-2-10
状态 离线
『第 8 楼』:  

wmic真是强大!!!!!!



欢迎进入我的网盘!!!
2008-8-17 20:41
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (52688226)  编辑帖子  回复  引用回复
23112656
中级用户





积分 220
发帖 99
注册 2008-6-26
状态 离线
『第 9 楼』:  

: by Herbert Kleebauer

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

@echo off

echo hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

set /p password=Enter password:<nul

for /f "tokens=*" %%i in ('in.com') do set password=%%i

pause

del in.com

echo.

echo The Password is:"%password%"

pause

中的
echo hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com
这一句问了一下我的老师;他给我讲解是这样的:我觉得更清楚更容易理解些;
拿出来分享一下

这个例子中的文件名是加了单引号,这就意味着这是一个外部命令,
也就是说,它是要被执行的。

in.com经过反汇编后,代码如下:

00000000: 685031                    push 3150
00000003: 58                        pop ax     ; AX=3150
00000004: 353030                    xor ax,3030 ; AX=0160
00000007: 50                        push ax
00000008: 5B                        pop bx ; BX=0160
00000009: 50                        push ax
0000000A: 5A                        pop dx ; DX=0160
0000000B: 42                        inc dx
0000000C: 42                        inc dx
0000000D: 42                        inc dx  ; DX=0163
0000000E: 666823622323              push 23236223
00000014: 6658                      pop eax ; EAX=23236223
00000016: 662D56406024              sub eax,24604056 ; EAX=FEC321CD
0000001C: 6650                      push eax
0000001E: 665D                      pop ebp ; EBP=FEC321CD
00000020: 66332F                    xor ebp,dword ptr [bx] ; EBP=EBP ^ [0160]
00000023: 66312F                    xor dword ptr [bx],ebp ; [0160]=FEC321CD
                                                            ; +0160 CD
                                                            ; +0161 21
                                                            ; +0162 C3
                                                            ; +0163 FE
其中+0160 与 +0161中的两个字节CD 21反汇编出来就是int 21h指令
+0162中的C3反汇编出来就是ret指令
最后那个+163中的FE是DOS输入功能0Ah的参数(前面的DX=0163就是指向了这个FE),
表示最多允许输入254个字符(包括回车在内)
00000026: 352B2B                    xor ax,2B2B  ; AX=0AE6,其中0Ah是DOS功能号,
                                                  ; E6没有用处
00000029: 7535                      jnz 00000060 ; 这里肯定会发生跳转,相当于jmp 160
0000002B: 78                                     ; 最后的78无用
0000002C: 0D                                     ; 0D与0A是echo时自动
0000002D: 0A                                     ; 产生的回车换行符
程序跳转到160后,就会执行以下指令:
int 21h ; 此时AH=0Ah, DX=0163h, 因此执行DOS的输入功能,
        ; 输入内容自动保存到+165开始的缓冲区中,而for循环会把各个字符逐个读出
ret     ; 程序返回到操作系统,自动结束

总结一下,这个in.com的作用是通过键盘输入一串字符,长度不超过254个(含回车)。
这个批处理还是比较巧妙的,它用一串可显示的字符串构造了一个可执行代码,实现了
键盘输入功能,配合for循环使得在批处理中可以实现不回显输入。

P.S.: 根据分析,这个批处理中的echo语句所包含的一堆乱码里的最后
      那个字符(即>前面++u5x中的x)可以删除不要。也可就是说,
          echo hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com
      可以改成
          echo hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5>in.com


以上为网上找的资料.但还是看不懂...郁闷啊...谁能看懂就帮忙解释一下啊

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





积分 15
发帖 8
注册 2008-8-19
状态 离线
『第 10 楼』:  

@echo off
for %%i in (Z Y X W V U T S R Q P O N M L K J I H G F E D C) do (
    if exist %%i:\nul (
        for /f "tokens=3" %%j in ('dir /-c %%i:\') do set freesize=%%j
        set last=%%i
        if not "!freesize!"=="0" goto last_drive
    )
)
goto :eof

:last_drive
echo 最后一个分区是 %last%
md %last%:\文件夹
pause

2008-8-19 11:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yeke
初级用户





积分 25
发帖 13
注册 2007-4-10
状态 离线
『第 11 楼』:  

谢谢,好代码,收下了

2009-8-21 04:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
marschant
新手上路





积分 12
发帖 10
注册 2009-8-17
状态 离线
『第 12 楼』:  

谢谢,好代码,收下了



菜菜
2009-8-22 04:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
marschant
新手上路





积分 12
发帖 10
注册 2009-8-17
状态 离线
『第 13 楼』:  

谢谢,好代码,收下了



菜菜
2009-8-22 04:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: