Board logo

标题: 最后一个分区的盘符怎样表达 [打印本页]

作者: 25167241     时间: 2008-7-27 11:29    标题: 最后一个分区的盘符怎样表达

我的U盘分两个分区,我想写一个批处理命令,从第一个分区运行最后一个分区的程序.并且想在任意一台电脑上都能运行.但是,每台机的分区情况都不同,这样最后一个分区的盘符不知道如何表达?请高手帮忙.无限感谢.
谢谢各位鼎力帮助.我的主要目的不是想知道盘符.而是李直接运行不知盘是的程序,如AZCX.EZE,怎样写批处理直接运行它呢?再请各位发表高见.谢谢

[ Last edited by 25167241 on 2008-7-27 at 12:30 PM ]
作者: 523066680     时间: 2008-7-27 12:01
郁闷 极度郁闷。不会弄
不过有个偏方  假设这个程序是programfile.exe 在该盘主目录下:
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 (
if exist %%a:\programfile.exe call %%a:\programfile.exe
)
(此贴并未解决题目中的问题)继续思考中……
作者: radem     时间: 2008-7-27 12:01

@echo off
for /f "delims=驱动器:\" %%i in ('fsutil fsinfo drives^|more') do fsutil fsinfo drivetype %%i:|findstr "移动">nul&&set str=%%i
echo 你的U盘盘符是:%str%
pause>nul

作者: obsolete     时间: 2008-7-27 12:23

@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 (
        vol %%i: 1>nul 2>nul
        if not errorlevel 1 (
                echo %%i
                pause & goto :EOF
        )
)
照楼主的想法写了一个,3楼的写法真是大开眼界
不过感觉上面的代码都有局限性的,不一定在任何环境下都能正确执行。
所以我的想法还是结合2楼的方法,如果你的U盘下建一个“特征文件”,就可以判断了。
作者: 25167241     时间: 2008-7-27 13:10    标题: 谢谢,再帮写详细

谢谢你的指点.
我是想在U盘的第一个盘运行最后一个盘的程序,不知盘符,批处理不知如何写.
(不是想知道盘符,)请帮忙写一写,谢谢
作者: slore     时间: 2008-7-27 13:58
如果在你U盘里,直接用相对路径
作者: 523066680     时间: 2008-7-27 14:03
按照5楼的说法   我2楼的代码应该可以解决了吧
作者: 25167241     时间: 2008-7-27 14:36    标题: 还不成

谢谢2楼.
我在CMD上试运行,提示命令出错.
是DOS和CMD命令不一样吗?
作者: 25167241     时间: 2008-7-27 14:44    标题: 能写具体一点吗

谢谢4楼的朋友.
U盘在两个区.不知盘符.在第一个区的批处理命令要运行最后一个区的
AZCX.EZE  程序.这个批处理应怎样写.请花点心思.谢谢了.

[ Last edited by 25167241 on 2008-7-27 at 02:46 PM ]
作者: obsolete     时间: 2008-7-27 16:01
不明白...2楼的方法就能用啊,你把programfile.exe替换成你的程序就好了。
作者: slore     时间: 2008-7-27 16:45
@echo off&setlocal ENABLEDELAYEDEXPANSION
Set AllDr=ABCDEFGHIJKLMNOPQRSTUVWXYZ无
Set MyDr=%~d0

for /l %%i in (0,1,25) do (
Call :GetDr %%i
if /i %MyDr%==!EaDr! Call :ExitFor %%i&&Goto :Next
)

:GetDr
Set EaDr=!AllDr:~%1,1!:
Goto :EOF

:ExitFor
Set /a InDr=%1+1
Echo 下一个分区是:!AllDr:~%InDr%,1!
Goto :EOF

:Next
pause
作者: 25167241     时间: 2008-7-27 17:00    标题: 能用CMD试吗?

11楼的大侠
我运行CMD,把您的命令贴上去.就提示出错.
能这样试吗?
在当前盘中,要运行最后一个盘的ZCMA.EXE,这个批处理命令,帮我写一写好吗,谢谢了.
作者: 523066680     时间: 2008-7-27 17:04
郁闷,极度郁闷!8楼的话足以让我吐血!cmd和dos命令……区别……
我太嫩了!真的不知道这两者有什么区别
不过我知道批处理和在命令行中执行的时候 有区别
我把2楼代码改下,你可以直接在命令行中用

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 (if exist %%a:\programfile.exe call %%a:\programfile.exe)

---------------------------------------------------------------------------------------------------------
经过十四楼与十五楼的温馨提示,以上代码改为
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 (if exist %%a:\programfile.exe call %a:\programfile.exe)

[ Last edited by 523066680 on 2008-7-27 at 06:02 PM ]
作者: 25167241     时间: 2008-7-27 17:20    标题: 效果是这样

13楼的大侠
我运行XP 的 CMD 程序.
把您的命令贴上去.
提示此时不应有%%a
不要郁闷,解决问题就会得到快乐.
作者: obsolete     时间: 2008-7-27 17:28
批处理和控制台直接运行还是有点不同的,恩,把上面的%%都改成%,再运行试试
作者: 523066680     时间: 2008-7-27 17:54
在改的帖子里忘了改那一部分…… 郁闷……&更加郁闷……真不好意思……
没脸见人啦……
作者: xypcmac     时间: 2008-7-27 18:14


  Quote:
Originally posted by 25167241 at 2008-7-27 17:20:
13楼的大侠
我运行XP 的 CMD 程序.
把您的命令贴上去.
提示此时不应有%%a
不要郁闷,解决问题就会得到快乐.

简单的说:
在命令行逐条执行命令是要遇到类似 %%i 这等参数,%是要减少一个的!

[ Last edited by xypcmac on 2008-7-27 at 06:16 PM ]
作者: xypcmac     时间: 2008-7-27 18:17
我觉得大家有点考虑不周全或误会。

1. 虽然U盘分了两个区(既然分了区那应该是USB-HDD模式),但Windows不一定会分配相邻的两个盘符给这两个U分区。

2. 虽然一般情况下,查找所有盘和软件名可以找出要运行的程序并运行。但如果其它盘也有同样名字的文件呢?


有个笨办法可以避免以上问题并正确找到运行:

由批处理本身取得批处理所在盘的盘符(U盘第一分区),然后利用 Ghost32 或 Dsptw 等第三方工具,由盘符查得对应的U盘,反过来,再由U盘查其最后分区。然后运行所要的软件即可。虽然有点点繁琐,但也行之有效。
作者: 25167241     时间: 2008-7-27 18:20    标题: 还差一点

13楼的大侠.%%改%,在CMD可以运行了.不过结果只是搜索程序,并不运行程序,
显示的结果是: 从A到Z
(if exist z:\programfile.exe call a:\programfile.exe)
……
(if exist z:\programfile.exe call z:\programfile.exe)
其中A B 肯定是不必用的.
也还运行程序.请加油,你一定成的.谢谢了.
最好击开始  运行 CMD 程序试一试,就更有把握了.
作者: HAT     时间: 2008-7-27 19:42
楼主还是先搞清楚bat和cmd的区别吧
作者: radem     时间: 2008-7-27 19:49


  Quote:
Originally posted by xypcmac at 2008-7-27 06:17 PM:
我觉得大家有点考虑不周全或误会。

1. 虽然U盘分了两个区(既然分了区那应该是USB-HDD模式),但Windows不一定会分配相邻的两个盘符给这两个U分区 ...

此言差已..我就有分2个区的U盘,每次插进USB口Windows都是分配相邻的两个盘符
作者: xypcmac     时间: 2008-7-27 19:51


  Quote:
Originally posted by 25167241 at 2008-7-27 18:20:
13楼的大侠.%%改%,在CMD可以运行了.不过结果只是搜索程序,并不运行程序,
显示的结果是: 从A到Z
(if exist z:\programfile.exe call a:\programfile.exe)
……
(if exis ...

都说了,像这样的当其他电脑上有同样程序名时,会出现混乱...

就不会是你所要的结果了!不过,你也可以改特殊一点的名字。
作者: 523066680     时间: 2008-7-27 20:03

发个图片给大家轻松一下 (想起一首歌,如果你觉得轻松就拍拍手…^_^)
关于上面的问题……
用一个已经成功测试的例子表示&同名的机会还是比较小的
而且是调用程序,如果同名,一般都是一样的东西了 也没必要判断最后一个盘了

看代码:
for %a in (b c d e f g h i j k l m n) do (if exist %a:\niubi.exe start %a:\niubi.exe)

关于U盘的分区我不是很了解……

[ Last edited by 523066680 on 2008-7-27 at 08:09 PM ]
作者: BC     时间: 2008-7-27 20:13
@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%:\001
pause

不是我写的...
作者: HAT     时间: 2008-7-27 20:58

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

作者: yangzhiyi     时间: 2008-7-27 22:42
2000系统有似没有 wmic
作者: bat-zw     时间: 2008-7-28 01:21
先假设这样一个情况成立:当U盘分区后系统是按顺序分配给U盘分区盘符的。
那么楼主的问题可以这样解决:
@echo off&setlocal enabledelayedexpansion
set "code=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"
for %%i in ('cd') do set "a=%%~di"
for %%i in (%code%) do (
     set /a n+=1&set "_!n!=%%i"
     if defined flag goto :next
     if /i "%%i" equ "%a:~,-1%" set "flag=a"
)
:next
start "" "!_%n%!:\programfile.exe"
exit