标题: 求助,在最后一个盘符建一个文件夹
[打印本页]
作者: yefenghome
时间: 2006-9-23 07:03
标题: 求助,在最后一个盘符建一个文件夹
机器的不同,分区不一样,怎么才能在最后一个分区建一个目录。
作者: redtek
时间: 2006-9-24 04:38
楼主什么好的实现想法吗?
为了兼容纯DOS和WINDOWS下的DOS,for枚举所有驱动器找到最后一个可写的驱动器?为了兼容纯DOS环境不能用VbScript等外部解释型脚本,只能用DOS内部命令。
1、DOS内部命令for枚举所有驱动器盘符
2、if测试枚举出来的盘符是否存在
3、如果存在就在那个盘符上建立你预定的目录名
我帮你做完了,不过最希望你自己做着玩,这样DOS水平提高很快~:)
希望楼主贴上你的实现过程,琢磨它是一件非常好玩的事情~:)
for的枚举与应用方法可以参考看这篇贴子:
==================================
批处理删除所有分区的默认共享
http://www.cn-dos.net/forum/viewthread.php?tid=21133&fpage=4
==================================
if的应用看一下 IF /? 的提示与帮助~:)
知识都是在遇解决不了问题的时候产生突破的~:)
希望楼主尽快做出来~:)
等待楼主讲讲发现和学习感受与精彩片断让大家一起分享~:)
作者: lxmxn
时间: 2006-9-25 04:36
可以用这个试试:
@echo off
setlocal enabledelayedexpansion
for /f "delims=\" %%i in ('fsutil fsinfo drives^|find /v ""') do (
set var=%%i
set drives=!var:~-2!
md !drives!\lxmxn
)
上面倒数第三行的“lxmxn”是我自己定义的文件夹名,你可以自行更改成你想命名的目录。
作者: redtek
时间: 2006-9-26 03:53
”求助,在最后一个盘符建一个文件夹“
执行完后,发现它建lxmxn目录到C盘上去了:)
非常佩服Lxmxn兄的fsutil fsinfo drives应用,所有驱动器一下子全出来了,超级爽~:)
作者: uime
时间: 2006-9-26 05:19
大家是不是没有考虑到最后一个盘符是光盘怎么办?
3楼的结果
Quote: |
E:\>for /F "delims=\" %i in ('fsutil fsinfo drives|find /v ""') do (
set var=%i
set drives=!var:~-2!
md !drives!\lxmxn
)
find: invalid predicate `' |
|
[
Last edited by uime on 2006-9-26 at 05:37 ]
作者: redtek
时间: 2006-9-26 06:20
一直等着楼主提问后看到2楼和3楼的启发自己写出来,
别人都写出来和自己写的来的记忆和懂的内容都不一样,
结果楼主失踪了……
让盘符倒着来,第一个测试的可写的驱动器就一定是最后一个可写的盘符。
@REM 其中redtek这个名字为你想要建立的目录名称
@REM CreateFile.Bat:
@REM ==========================================
@ECHO off
FOR %%c 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 %%c: (
MD %%c:\Redtek
GOTO :EOF
)
)
作者: uime
时间: 2006-9-26 18:54
Quote: |
Originally posted by redtek at 2006-9-26 06:20:
一直等着楼主提问后看到2楼和3楼的启发自己写出来,
别人都写出来和自己写的来的记忆和懂的内容都不一样,
结果楼主失踪了……
让盘符堮.. |
|
如果光驱中有光盘,这个不会执行
如果有用subst虚拟的盘,这个会建在虚拟目录中
[
Last edited by uime on 2006-9-26 at 19:18 ]
作者: yefenghome
时间: 2006-9-27 05:22
Quote: |
Originally posted by redtek at 2006-9-26 06:20:
一直等着楼主提问后看到2楼和3楼的启发自己写出来,
别人都写出来和自己写的来的记忆和懂的内容都不一样,
结果楼主失踪了……
让盘符堮.. |
|
初学,看了一下帮助,有一点不明
goto :eof
是什么意思? goto :eof好像是跳到标签为:eof 处执行,可在整个处理中没有发现这个标签。
作者: yefenghome
时间: 2006-9-27 05:22
Quote: |
Originally posted by redtek at 2006-9-26 06:20:
一直等着楼主提问后看到2楼和3楼的启发自己写出来,
别人都写出来和自己写的来的记忆和懂的内容都不一样,
结果楼主失踪了……
让盘符堮.. |
|
初学,看了一下帮助,有一点不明
goto :eof
是什么意思? goto :eof好像是跳到标签为:eof 处执行,可在整个处理中没有发现这个标签。
作者: chujiafu
时间: 2006-9-28 04:09
如果在纯Dos中的最后一个盘符是Ram盘怎么办?
作者: redtek
时间: 2006-9-28 06:19
如果正在建目录的时候突然停电了怎么办?
如果最后一个盘正巧遇上了被映射的网络上另一台主机的磁盘怎么办?
如果有常驻内存的某个程序监视系统不让向最后一个盘写内容怎么办?
如果最后一个盘是U盘又开启了写保护怎么办?
如果操作的时候遇到了系统百年不遇的BUG怎么办?
哈哈哈……
作者: weilong888
时间: 2006-9-28 08:09
for与if是强大啊。
作者: namejm
时间: 2006-9-28 10:33
Quote: |
Originally posted by redtek at 2006-9-26 06:20:
@REM 其中redtek这个名字为你想要建立的目录名称
@REM CreateFile.Bat:
@REM ==========================================
@ECHO off
FOR %%c 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 %%c: (
MD %%c:\Redtek
GOTO :EOF
)
) |
|
这段代码是有问题的,如果最后一个存在的盘符是光驱的盘符,那么,它就无法创建了。按照楼主的说法,应该是找最后一个可写的盘。那么,就应该写成
@ECHO off
FOR %%c 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 %%c: (
MD %%c:\Redtek 2>nul && GOTO :EOF
)
)
作者: Jnwei1202
时间: 2006-9-28 21:28
这上面所说的只能在 FAT16 FAT32 的分区格式上吧
在纯DOS下如果是 硬盘全是NTFS 格式或最后一个盘是NTFS格式就不行了
[
Last edited by Jnwei1202 on 2006-9-28 at 21:36 ]
作者: NaturalJ0
时间: 2006-9-28 22:04
那就先加载NTFS驱动
作者: Jnwei1202
时间: 2006-9-28 22:23
楼上的
加了能用吗?
比如 C: D: E: F:
FAT32 NTFS NTFS FAT32
DOS 下加载分区后盘符是怎么排列的? 排出盘符顺序最后一个盘符就是最后一个分区吗?
如果 最后一个区是 NTFS 格式的 加载的NTFS 驱动是否能向 NTFS 格式里写数据
我知道 用 OMNIFS 可以向NTFS 格式里写数据
但不知道要怎么把查出有多少个分区把他设成 一个变量%disk%
omnifs mkdir 1.%disk%
作者: fastslz
时间: 2006-9-28 23:08
贴我自己的DOS维护盘里的一段代码吧,家当哦

借助gdisk和gdisk32实现DOS,CMD下通用方法,也不用加载讨厌的NTFS驱动了。
Gdisk版本8.3@echo off
::中国DOS联盟论坛: fastslz
FOR %%A IN (id1 id2 id3 id4 id5 id6 id7 id8 id9) DO SET %%A=
Gdisk 1 >Gdisk.TXT
FIND /i /n "NTFS" Gdisk.TXT|FIND /i "[5]" >nul
if not errorlevel 1 set id1=C盘(NTFS)
FIND /i /n "FAT32" Gdisk.TXT|FIND /i "[5]" >nul
if not errorlevel 1 set id1=C盘(FAT32)
FIND /i /n "NTFS" Gdisk.TXT|FIND /i "[7]" >nul
if not errorlevel 1 set id2=D盘(NTFS)
FIND /i /n "FAT32" Gdisk.TXT|FIND /i "[7]" >nul
if not errorlevel 1 set id2=D盘(FAT32)
FIND /i /n "NTFS" Gdisk.TXT|FIND /i "[8]" >nul
if not errorlevel 1 set id3=E盘(NTFS)
FIND /i /n "FAT32" Gdisk.TXT|FIND /i "[8]" >nul
if not errorlevel 1 set id3=E盘(FAT32)
FIND /i /n "NTFS" Gdisk.TXT|FIND /i "[9]" >nul
if not errorlevel 1 set id4=F盘(NTFS)
FIND /i /n "FAT32" Gdisk.TXT|FIND /i "[9]" >nul
if not errorlevel 1 set id4=F盘(FAT32)
FIND /i /n "NTFS" Gdisk.TXT|FIND /i "[10]" >nul
if not errorlevel 1 set id5=G盘(NTFS)
FIND /i /n "FAT32" Gdisk.TXT|FIND /i "[10]" >nul
if not errorlevel 1 set id5=G盘(FAT32)
FIND /i /n "NTFS" Gdisk.TXT|FIND /i "[11]" >nul
if not errorlevel 1 set id6=H盘(NTFS)
FIND /i /n "FAT32" Gdisk.TXT|FIND /i "[11]" >nul
if not errorlevel 1 set id6=H盘(FAT32)
FIND /i /n "NTFS" Gdisk.TXT|FIND /i "[12]" >nul
if not errorlevel 1 set id7=I盘(NTFS)
FIND /i /n "FAT32" Gdisk.TXT|FIND /i "[12]" >nul
if not errorlevel 1 set id7=I盘(FAT32)
FIND /i /n "NTFS" Gdisk.TXT|FIND /i "[13]" >nul
if not errorlevel 1 set id8=J盘(NTFS)
FIND /i /n "FAT32" Gdisk.TXT|FIND /i "[13]" >nul
if not errorlevel 1 set id8=J盘(FAT32)
FIND /i /n "NTFS" Gdisk.TXT|FIND /i "[14]" >nul
if not errorlevel 1 set id9=K盘(NTFS)
FIND /i /n "FAT32" Gdisk.TXT|FIND /i "[14]" >nul
if not errorlevel 1 set id9=K盘(FAT32)
cls
echo.
echo.
echo 显示第1硬盘上分区数及磁盘类型
echo.
echo %id1% %id2% %id3% %id4% %id5% %id6% %id7% %id8% %id9%
PAUSE >NUL
rem del Gdisk.TXT
作者: fastslz
时间: 2006-9-28 23:31
如果考虑你的启动盘是多用途话,某些硬盘有2个以上主分区代码就不正确了。自己修改一下吧
把17楼作为方案1
FIND /i /n "PRIMARY" Gdisk.TXT|FIND /i "[6]" >nul
if not errorlevel 1 ECHO 你的第1硬盘上有2个以上主分区
GOTO 方案2
:方案2
.........不重复了自己掂量着改吧
觉的这个方法好给我评分哦
[
Last edited by fastslz on 2006-9-28 at 23:33 ]
作者: jieok3375
时间: 2006-9-30 04:09
学到点东西,谢谢啊!
作者: jieok3375
时间: 2006-9-30 04:09
学习了。
作者: fastslz
时间: 2006-9-30 05:59
这个也是对付DOS与Windows下最好的方案,单硬盘原生Windows情况下系统盘符完全一样!
作者: lizaoyou
时间: 2007-1-25 08:31
迟来,学习中...
参考6楼redtek兄的思路,可兼容纯DOS模式的代码如下:
@ECHO OFF
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 IF EXIST %%i:\nul SET last=%%i:
MD %last%\tmp
(测试环境:winXPsp2_CMD、MSDOS7.10)
纯DOS下的问题:
1. IF命令不能直接测试盘符的存在,可通过测试空目录(nul)实现;是否有更好的办法?
2. FOR命令也不能使用"GOTO :EOF"退出循环,求教redtek兄及各位有何方法可实现“条件成立时退出FOR”?
wait...
作者: jckjuc
时间: 2007-2-1 03:27
呵呵。。大家好热心啊。下次我有问题也要麻烦大家啦。
真是很多东西要向大侠们学习啊
作者: wlt2007
时间: 2007-2-11 13:52
没有看明白:不就在一个分区建一个文件夹吗?MD?
什么是最后一个分区?仍然不明白?在windows下一般都是先入为主,字母索引的方式排列,最后一个分区是否是排列最后的那个?在DOS下的启动检测中最后的那个?——均排除不可识别和不可写入分区。如是:咱们倒要提一个问题——今天你可以在最后一个分区建目录;明天或后天更改的盘符,它还在最后一个分区吗?咱们质疑其实用价值!如否:LZ的系统中有Linux,上述说的都是废话。
作者: 0451lym
时间: 2007-2-11 19:06
呵呵,还是这个问题郁闷.
分区符转换就可以了.
1种方法,启动系统的时候直接转换成分区符的分析文件.然后调用以1.1: 1.2: 1.3: 1.4:......的方式判断第1块硬盘的最后一个分区符,在转换成盘符,MD建立.或者弄自解压的空文件夹包,复制过去自动释放!
2种方法也是基本雷同不太细说了!
作者: 0451lym
时间: 2007-2-11 19:12
如果想深入了解请分析XUSEN的作品,启动机器分析分区符的时间大概是30秒!
或者看看最近我和llztt1讨论的分区盘符转换讨论的部分帖子!
[
Last edited by 0451lym on 2007-2-11 at 07:14 PM ]
作者: xsjlai
时间: 2007-2-20 09:12
学到了一些!
作者: lhteee
时间: 2007-2-20 14:15
哪有Gdisk8.3???