Board logo

标题: [系统相关] 根据磁盘里指定的文件夹来修改磁盘盘符的批处理 [打印本页]

作者: wangplay163    时间: 2008-3-31 12:25     标题: 根据磁盘里指定的文件夹来修改磁盘盘符的批处理

因为
网吧要用虚拟盘 怕客户机有U盘等会导致盘符不对
故在每个虚拟盘里建了个文件夹 想根据虚拟盘里的文件夹来指定修改盘符。。。

如:连接上的盘符为 G , H ,  I    等 ,在 G ,  H,   I 中分别已存在不同的文件夹(G盘里为O ,H盘里为PI 盘里为Q    以此类推。。。) ,只是想让磁盘根据文件夹名,来修改成与此文件夹同名的盘符!
或者直接 按 虚拟盘里的文件夹来 指定 修改盘符

详细说明:
我用 Microsoft iSCSI Initiator 连接 ISCSI盘后(客户机上本身有 C D E F盘) 在系统上出了 G,H,I,G,K,5个磁盘
想用批处理把它们改称 O,P,Q,R,S 盘

但考虑到客户机会有U盘之类的。会打乱出盘的顺序。(客户机上本身有 C D E F盘)

就在 G,H,I,G,K5个虚拟盘中分别建立的O,P,Q,R,S 5个文件夹
其中G,H,I,G,K5个虚拟盘中都有大量的游戏,就想让批处理扫描所有的磁盘,如果某个磁盘中 含有 O或P 或 Q或 R 或 S文件夹 ,就把此磁盘的盘符修改成含有相应文件夹名的盘符
例如  H盘中含有 O这个文件夹 就把此盘符改称 O


批处理 在客户机上 点机游戏时,运行批处理


之前光着急了~!打错了~!~


就是 G盘按照里面的文件夹O  把盘符改称O盘
请高手出手相助!

[ 本帖最后由 wangplay163 于 2008-3-31 16:11 编辑 ]
作者: wangplay163    时间: 2008-3-31 12:40

时间紧迫~!
老大们帮下忙了~
游戏服务器都停了N天了
作者: wangplay163    时间: 2008-3-31 12:48

大家都去吃饭了吧!~!!!
作者: 随风    时间: 2008-3-31 15:17

不太明白你的意识,既然g盘里的文件夹是g,那还修改什么呀?
作者: wangplay163    时间: 2008-3-31 15:35

汗~~光着急了~!~
意思错了!~!~!
作者: wangplay163    时间: 2008-3-31 15:38

感谢 随风 大大~提醒!!!!!!!!!!!!!!!
作者: 随风    时间: 2008-3-31 15:52

不知道你是不是这个意识
g盘里只有一个文件夹,以它的名字替换g盘盘符。
:
  1. @echo off
  2. set x=g
  3. for /f "delims=" %%a in ('dir/b/ad %x%:\') do set m=%%~a
  4. for /f %%i in ('mountvol %x%: /L') do (
  5. mountvol %x%: /d && mountvol %m%: %%i
  6. )
  7. echo 操作成功,按任意键退出.
  8. pause
复制代码

[ 本帖最后由 随风 于 2008-3-31 17:40 编辑 ]
作者: wangplay163    时间: 2008-3-31 16:06

我的意思是
我用 Microsoft iSCSI Initiator 连接 ISCSI盘后(客户机上本身有 C D E F盘) 在系统上出了 G,H,I,G,K,5个磁盘
想用批处理把它们改称 O,P,Q,R,S 盘

但考虑到客户机会有U盘之类的。会打乱出盘的顺序。(客户机上本身有 C D E F盘)

就在 G,H,I,G,K5个虚拟盘中分别建立的O,P,Q,R,S 5个文件夹
其中G,H,I,G,K5个虚拟盘中都有大量的游戏,就想让批处理扫描所有的磁盘,如果某个磁盘中 含有 O或P 或 Q或 R 或 S文件夹 ,就把此磁盘的盘符修改成含有相应文件夹名的盘符
例如  H盘中含有 O这个文件夹 就把此盘符改称 O


批处理 在客户机上 点机游戏时,运行批处理

[ 本帖最后由 wangplay163 于 2008-3-31 16:08 编辑 ]
作者: wangplay163    时间: 2008-3-31 16:09

随风 巡查
辛苦了
作者: 随风    时间: 2008-3-31 16:13

这么理解吧
循环ghijk这5个盘符根目录下的所有文件夹,当在某盘符下发现opqrs中的任何一个文件夹时,就以此文件夹名更改当前盘符?
是这样么?
作者: wangplay163    时间: 2008-3-31 16:22

原帖由 随风 于 2008-3-31 16:13 发表
这么理解吧
循环ghijk这5个盘符根目录下的所有文件夹,当在某盘符下发现opqrs中的任何一个文件夹时,就以此文件夹名更改当前盘符?
是这样么?


就是
循环的 盘符范围在大点~~!~


主要考虑到客户机上有人用 U盘
这样 会打乱 ISCSI出盘的顺序
比如我现在的 系统本身有 CDEF盘 出了ISCSI盘后 ISCSI盘为GHIJK
但是有U盘插入后U盘出的是G或H等  ISCSI出的盘会变成IJKLM(向后推移了)
现在想要的就是让批处理扫描现在系统上存在的盘(可排除系统下的CDEF盘)某盘符下发现opqrs中的任何一个文件夹时,就以此文件夹名更改当前盘符

谢谢随风 大大了~!~~~~~~!~!
作者: 随风    时间: 2008-3-31 16:26

:
  1. @echo off
  2. for %%i in (g h i j k) do (
  3.   cd/d %%i:
  4.   for %%a in (o p q r s) do if exist %%a call :loop %%i %%a
  5. )  
  6. pause
  7. exit
  8. :loop
  9. for /f %%j in ('mountvol %~1: /L') do (
  10.   mountvol %~1: /d && mountvol %~2: %%j
  11. )
  12. echo 以将 %~1 盘改为 %~2 盘
  13. goto :eof
复制代码

[ 本帖最后由 随风 于 2008-3-31 17:38 编辑 ]
作者: wangplay163    时间: 2008-3-31 16:30

测试中

感谢   随风 大大了~!!!!!!!!!!!
作者: 随风    时间: 2008-3-31 16:32

又精简了一下
但是若根目录下出现不带后缀名的文件名为o p q r s的也会更改盘符。

[ 本帖最后由 随风 于 2008-3-31 16:35 编辑 ]
作者: wangplay163    时间: 2008-3-31 16:36

提示这是什么意思?
作者: 随风    时间: 2008-3-31 16:37

呵呵,匆忙中打错了,应该是 delims=
另:代码以更改,你试试。。
作者: wangplay163    时间: 2008-3-31 16:38

我把机器重起下试试看~!~


辛苦 你了
作者: wangplay163    时间: 2008-3-31 16:55

这是怎么搞的啊~!?
作者: wangplay163    时间: 2008-3-31 16:57

D:\pingtai>for %i in (g h i j k) do (
cd/d %i:
for %a in (o p q r s) do if exist %a call :loop %i %a
)

D:\pingtai>(
cd/d g:
for %a in (o p q r s) do if exist %a call :loop g %a
)

G:\>if exist o call :loop g o

G:\>if exist p call :loop g p

G:\>if exist q call :loop g q

G:\>if exist r call :loop g r

G:\>for /F %j in ('mountvol g /L') do (mountvol g /d   && mountvol r %j )

G:\>(mountvol g /d   && mountvol r 系统找不到指定的文件。 )
系统找不到指定的文件。

G:\>echo 以将 g 盘改为 r 盘
以将 g 盘改为 r 盘

G:\>goto :eof

G:\>if exist s call :loop g s

G:\>(
cd/d h:
for %a in (o p q r s) do if exist %a call :loop h %a
)

H:\>if exist o call :loop h o

H:\>if exist p call :loop h p

H:\>if exist q call :loop h q

H:\>for /F %j in ('mountvol h /L') do (mountvol h /d   && mountvol q %j )

H:\>(mountvol h /d   && mountvol q 系统找不到指定的文件。 )
系统找不到指定的文件。

H:\>echo 以将 h 盘改为 q 盘
以将 h 盘改为 q 盘

H:\>goto :eof

H:\>if exist r call :loop h r

H:\>if exist s call :loop h s

H:\>(
cd/d i:
for %a in (o p q r s) do if exist %a call :loop i %a
)

I:\>if exist o call :loop i o

I:\>if exist p call :loop i p

I:\>if exist q call :loop i q

I:\>if exist r call :loop i r

I:\>if exist s call :loop i s

I:\>for /F %j in ('mountvol i /L') do (mountvol i /d   && mountvol s %j )

I:\>(mountvol i /d   && mountvol s 系统找不到指定的文件。 )
系统找不到指定的文件。

I:\>echo 以将 i 盘改为 s 盘
以将 i 盘改为 s 盘

I:\>goto :eof

I:\>(
cd/d j:
for %a in (o p q r s) do if exist %a call :loop j %a
)

J:\>if exist o call :loop j o

J:\>if exist p call :loop j p

J:\>if exist q call :loop j q

J:\>if exist r call :loop j r

J:\>if exist s call :loop j s

J:\>(
cd/d k:
for %a in (o p q r s) do if exist %a call :loop k %a
)

K:\>if exist o call :loop k o

K:\>if exist p call :loop k p

K:\>for /F %j in ('mountvol k /L') do (mountvol k /d   && mountvol p %j )

K:\>(mountvol k /d   && mountvol p 系统找不到指定的文件。 )
系统找不到指定的文件。

K:\>echo 以将 k 盘改为 p 盘
以将 k 盘改为 p 盘

K:\>goto :eof

K:\>if exist q call :loop k q

K:\>if exist r call :loop k r

K:\>if exist s call :loop k s

K:\>pause
请按任意键继续. . .


这是生成的信息
作者: 随风    时间: 2008-3-31 17:36

不好意识,忘了冒号了。
再试试。。。
:
  1. @echo off
  2. for %%i in (g h i j k) do (
  3.   for %%a in (o p q r s) do if exist %%i:\%%a\ call :loop %%i %%a
  4. )  
  5. pause&exit
  6. :loop
  7. for /f %%j in ('mountvol %~1: /L') do (mountvol %~1: /d && mountvol %~2: %%j)
  8. echo 以将 %~1 盘改为 %~2 盘
  9. goto :eof
复制代码

[ 本帖最后由 随风 于 2008-3-31 17:50 编辑 ]
作者: wangplay163    时间: 2008-3-31 17:58

执行后所有盘都不见了
这是为什么啊
作者: wangplay163    时间: 2008-3-31 18:01

这是执行信息

E:\>for %i in (G H I J K L) do (
cd/d %i:
for %a in (O P Q R S T) do if exist %a call :loop %i %a
)

E:\>(
cd/d G:
for %a in (O P Q R S T) do if exist %a call :loop G %a
)

G:\>if exist O call :loop G O

G:\>if exist P call :loop G P

G:\>if exist Q call :loop G Q

G:\>if exist R call :loop G R

G:\>for /F %j in ('mountvol G: /L') do (mountvol G: /d   && mountvol R: %j )

G:\>(mountvol G: /d   && mountvol R: \\?\Volume{e704cf7a-fefe-11dc-bbb2-0019e072
64c0}\ )
当前目录无效。

G:\>echo 以将 G 盘改为 R 盘
以将 G 盘改为 R 盘

G:\>goto :eof

G:\>if exist S call :loop G S

G:\>if exist T call :loop G T

G:\>(
cd/d H:
for %a in (O P Q R S T) do if exist %a call :loop H %a
)

H:\>if exist O call :loop H O

H:\>if exist P call :loop H P

H:\>if exist Q call :loop H Q

H:\>for /F %j in ('mountvol H: /L') do (mountvol H: /d   && mountvol Q: %j )

H:\>(mountvol H: /d   && mountvol Q: \\?\Volume{e704cf7b-fefe-11dc-bbb2-0019e072
64c0}\ )
当前目录无效。

H:\>echo 以将 H 盘改为 Q 盘
以将 H 盘改为 Q 盘

H:\>goto :eof

H:\>if exist R call :loop H R

H:\>if exist S call :loop H S

H:\>if exist T call :loop H T

H:\>(
cd/d I:
for %a in (O P Q R S T) do if exist %a call :loop I %a
)

I:\>if exist O call :loop I O

I:\>if exist P call :loop I P

I:\>if exist Q call :loop I Q

I:\>if exist R call :loop I R

I:\>if exist S call :loop I S

I:\>for /F %j in ('mountvol I: /L') do (mountvol I: /d   && mountvol S: %j )

I:\>(mountvol I: /d   && mountvol S: \\?\Volume{e704cf7c-fefe-11dc-bbb2-0019e072
64c0}\ )
当前目录无效。

I:\>echo 以将 I 盘改为 S 盘
以将 I 盘改为 S 盘

I:\>goto :eof

I:\>if exist T call :loop I T

I:\>(
cd/d J:
for %a in (O P Q R S T) do if exist %a call :loop J %a
)

J:\>if exist O call :loop J O

J:\>if exist P call :loop J P

J:\>if exist Q call :loop J Q

J:\>if exist R call :loop J R

J:\>if exist S call :loop J S

J:\>if exist T call :loop J T

J:\>for /F %j in ('mountvol J: /L') do (mountvol J: /d   && mountvol T: %j )

J:\>(mountvol J: /d   && mountvol T: \\?\Volume{e704cf7d-fefe-11dc-bbb2-0019e072
64c0}\ )
当前目录无效。

J:\>echo 以将 J 盘改为 T 盘
以将 J 盘改为 T 盘

J:\>goto :eof

J:\>(
cd/d K:
for %a in (O P Q R S T) do if exist %a call :loop K %a
)

K:\>if exist O call :loop K O

K:\>if exist P call :loop K P

K:\>for /F %j in ('mountvol K: /L') do (mountvol K: /d   && mountvol P: %j )

K:\>(mountvol K: /d   && mountvol P: \\?\Volume{e704cf7e-fefe-11dc-bbb2-0019e072
64c0}\ )
当前目录无效。

K:\>echo 以将 K 盘改为 P 盘
以将 K 盘改为 P 盘

K:\>goto :eof

K:\>if exist Q call :loop K Q

K:\>if exist R call :loop K R

K:\>if exist S call :loop K S

K:\>if exist T call :loop K T

K:\>(
cd/d L:
for %a in (O P Q R S T) do if exist %a call :loop L %a
)
系统找不到指定的驱动器。

K:\>if exist O call :loop L O

K:\>if exist P call :loop L P

K:\>if exist Q call :loop L Q

K:\>if exist R call :loop L R

K:\>if exist S call :loop L S

K:\>if exist T call :loop L T

K:\>pause
请按任意键继续. . .




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2