[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] 根据磁盘里指定的文件夹来修改磁盘盘符的批处理

因为
网吧要用虚拟盘 怕客户机有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 编辑 ]

这是执行信息

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
请按任意键继续. . .

TOP

执行后所有盘都不见了
这是为什么啊

TOP

不好意识,忘了冒号了。
再试试。。。
:
  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 编辑 ]
技术问题请到论坛发帖求助!

TOP

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
请按任意键继续. . .


这是生成的信息

TOP

这是怎么搞的啊~!?

TOP

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


辛苦 你了

TOP

呵呵,匆忙中打错了,应该是 delims=
另:代码以更改,你试试。。
技术问题请到论坛发帖求助!

TOP

提示这是什么意思?

TOP

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

[ 本帖最后由 随风 于 2008-3-31 16:35 编辑 ]
技术问题请到论坛发帖求助!

TOP

测试中

感谢   随风 大大了~!!!!!!!!!!!

TOP

:
  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 编辑 ]
技术问题请到论坛发帖求助!

TOP

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


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


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

谢谢随风 大大了~!~~~~~~!~!

TOP

这么理解吧
循环ghijk这5个盘符根目录下的所有文件夹,当在某盘符下发现opqrs中的任何一个文件夹时,就以此文件夹名更改当前盘符?
是这样么?
技术问题请到论坛发帖求助!

TOP

随风 巡查
辛苦了

TOP

返回列表