无忧启动论坛

标题: 请教各位:怎样在windows下用批命令在硬盘上自动寻找最后的分区并在其中建一个目录? [打印本页]

作者: pz    时间: 2007-2-19 17:28
标题: 请教各位:怎样在windows下用批命令在硬盘上自动寻找最后的分区并在其中建一个目录?
请教各位:怎样在windows下,用批命令在硬盘上自动寻找最后分区的盘符并在其中建一个目录?要求不包括U盘的盘符。
先谢谢了!

[ 本帖最后由 pz 于 2007-2-23 10:07 PM 编辑 ]
作者: xsjlai88    时间: 2007-2-19 18:42
我也需要呢!
作者: lianjiang    时间: 2007-2-20 09:48
可参看dos之家的一键ghost的批处理。
作者: pz    时间: 2007-2-22 20:40
已经解决。
@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%
pause

但有个缺点:如果u盘在机器上插着,找出来的就是u盘的盘符。该怎样做才能使得找出来的最后分区盘符在u盘插在机器上时不是u盘的盘符呢?
作者: lianjiang    时间: 2007-2-23 11:22
可用ghost32 -dd获得。
而且你那也不是用dos获得的。呵呵。

[ 本帖最后由 lianjiang 于 2007-2-23 11:25 AM 编辑 ]
作者: pz    时间: 2007-2-23 22:03
原帖由 lianjiang 于 2007-2-23 11:22 AM 发表
可用ghost32 -dd获得。

请问能说的详细点吗?先谢谢了!
作者: 老毛桃    时间: 2007-2-24 12:39
原帖由 pz 于 2007-2-22 20:40 发表
已经解决。
@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
...

在 Windows 环境下,是非常容易判断的,如果不借助于 GHOST32.EXE,可使用如下代码
  1. @ECHO OFF
  2. For %%i 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 FOR /f %%j in ('FSUTIL FSINFO DRIVETYPE %%i:^|FIND /I "固定驱动器"') DO SET LastP=%%j
  3. ECHO 最后一个分区是 %LastP%&&ECHO.
  4. PAUSE
复制代码

可以有效避免 U 盘的干扰,但是对于 USB 移动硬盘和虚拟硬盘,无法正确排除。

如果借助于 GHOST32,可以有效排除虚拟硬盘、U 盘,但是也无法区分 USB 移动硬盘和固定硬盘。却能找出包括 Hidden 类型的分区,这对于 Ghost 操作来说是相当便捷的。

  1. @ECHO OFF
  2. START /B /W Ghost32 -DD>NUL
  3. for /l %%i in (1,1,6) do for /l %%j in (1,1,10) do for /f "tokens=3" %%k in ('find /c "  %%i:%%j" GHSTSTAT.TXT') do IF %%k GTR 0 SET LastP=%%i:%%j
  4. ECHO 最后一个分区是 %LastP%&&ECHO.&&DEL GHSTSTAT.TXT /Q
  5. PAUSE
复制代码

作者: pz    时间: 2007-2-24 22:41
谢谢老毛桃版主。
您提供的方法1经实验除了USB硬盘会和固定硬盘混淆外,与U盘不再混淆。但方法2
  1. @ECHO OFF
  2. START /B /W Ghost32 -DD>NUL
  3. for /l %%i in (1,1,6) do for /l %%j in (1,1,10) do for /f "tokens=3" %%k in ('find /c "  %%i:%%j" GHSTSTAT.TXT') do IF %%k GTR 0 SET LastP=%%i:%%j
  4. ECHO 最后一个分区是 %LastP%&&ECHO.&&DEL GHSTSTAT.TXT /Q
  5. PAUSE
复制代码

在windows下还是会出现U盘和固定硬盘混淆的问题。我觉得应改为:
  1. @ECHO OFF
  2. START /B /W Ghost32 -DD>NUL
  3. for /l %%i in (1,1,1) do for /l %%j in (1,1,10) do for /f "tokens=3" %%k in ('find /c "  %%i:%%j" GHSTSTAT.TXT') do IF %%k GTR 0 SET LastP=%%i:%%j
  4. ECHO 最后一个分区是 %LastP%&&ECHO.&&DEL GHSTSTAT.TXT /Q
  5. PAUSE
复制代码

这样经测试找出的就是机器上第一硬盘的最后分区。
请老毛桃版主看看是否正确?

[ 本帖最后由 pz 于 2007-2-24 11:35 PM 编辑 ]
作者: pz    时间: 2007-2-25 10:28
另外:老毛桃版主的第二个方法所取到的是类似“1:4”的格式,不知怎样改代码才能做到所取得的是所对应的盘符呢?
作者: 老毛桃    时间: 2007-2-25 15:00
原帖由 pz 于 2007-2-24 22:41 发表
谢谢老毛桃版主。
您提供的方法1经实验除了USB硬盘会和固定硬盘混淆外,与U盘不再混淆。但方法2
@ECHO OFF
START /B /W Ghost32 -DD>NUL
for /l %%i in (1,1,6) do for /l %%j in (1,1,10) do for /f &quo ...

经过你这么一修改的话,就只能支持 1 块固定硬盘了。

如果安装有两块固定硬盘,最终找到的也只是第一块硬盘的最后分区。
作者: 老毛桃    时间: 2007-2-25 15:04
原帖由 pz 于 2007-2-25 10:28 发表
另外:老毛桃版主的第二个方法所取到的是类似“1:4”的格式,不知怎样改代码才能做到所取得的是所对应的盘符呢?

无法将 1:4 形式的分区标志转换成分区符,这是 GHOST 对于分区号标识特有的方法,它能够寻找到隐藏分区,并且可以支持再不将隐藏分区分配盘符的情况下对其读写。换言之便是,GHOST 可以将你的 C 盘备份到隐藏分区中去。
作者: pz    时间: 2007-2-25 15:22
再次谢谢老毛桃版主的指教!
作者: lanseyudibn    时间: 2009-5-17 13:54
谢谢!!学习中
作者: dos时代菜鸟    时间: 2009-5-25 14:53
windows 下用vbs更容易。

On Error Resume Next
Set fs=CreateObject("scripting.filesystemobject")
Set disks=fs.drives
For Each disk In disks
if disk.isready And  disk.DriveType=2 Then
  drv=disk.DriveLetter
end if
Next
msg="最后一个本地硬盘分区是:"&drv&":"
MsgBox msg,0,"最后分区"
fs.CreateFolder(drv&":\ggg")

脚本将在win下最后一个分区建立ggg文件夹。


可以有效排除移动硬盘、光盘、网络盘、虚拟盘。

不过也有弊端,就是 如果此前人为在“磁盘管理”中打乱了磁盘排序,就有可能按照错乱的排序找出最后分区。

[ 本帖最后由 dos时代菜鸟 于 2009-5-25 17:05 编辑 ]
作者: dos时代菜鸟    时间: 2009-5-25 17:08
如果借助第三方软件,用gdisk32 列出所有分区信息,在找出 所有带 : 的语句,取最后一个就是了。
只需要一句话:
for /f "tokens=1" %c in ('gdisk32 1 ^|find /i ":"') do @set lastd=%c

就可以把第一硬盘的最后分区盘符赋值给变量 lastd

[ 本帖最后由 dos时代菜鸟 于 2009-5-25 17:16 编辑 ]
作者: lianjiang    时间: 2009-5-25 21:48
1,问题交代不清。
2,2年前的就贴。

所以已没有在这个问题上继续回答的必要。
当然若另开一个新帖,仍有继续探讨的意义。




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3