中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-30 02:11
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,278 会员排行
DOS批处理 & 脚本技术(批处理室) » [已结]如何快速进入另一驱动器的相同子目录?
可打印版本  1,203 / 14
第1楼 czzp2004 发表于 2008-11-30 01:45
初级用户 发帖 18 积分 23
[已结]如何快速进入另一驱动器的相同子目录?
时常改动一些图形数据文件,并保证网络服务器数据的同步更新,为方便及时的访问网络驱动器的指定目录,想用批处理实现,需要大家的帮助!(其实本地文件夹的右键已经加入了DOS快速通道,能很方便的访问,因为要在DOS下使用ARJ,一直都用ARJ压缩,习惯了,HOHO)问题情况如下:
本地机的目录结构(很多,举了两个例子)
d:\user\1\abcd\0812
d:\user\2\eeffg\0812
网络驱动器目录
h:\th\user\1\eeffg\0812
h:\th\user\3\abcd\0812
假如我现在处于d:\user\1\abcd\0812中,(dos状态),想快速地进入到h:\th\user\3\abcd\0812下,请教如何解决?当然,此时的文件夹3是假设,有可能是1,或2

下边是我自己现学现用弄的,感觉能实现功能,但觉得有缺点,希望大家指点!
我机器的环境(XPsp2)



[ Last edited by HAT on 2008-12-6 at 19:59 ]
第2楼 sea1112 发表于 2008-11-30 15:34
初级用户 发帖 119 积分 131 来自 gz
@echo off
:ag
setlocal enabledelayedexpansion
for %%a in (d h) do (for /f "delims=" %%i in ('dir /b/s %%a:0812') do (set /a n+=1
call set w%%n%%=%%i
call echo %%n%% %%i))
set /p y=输入行号打开
call start "" "%%w!y!%%"
goto ag

[ Last edited by sea1112 on 2008-11-30 at 15:58 ]
第3楼 czzp2004 发表于 2008-11-30 20:18
初级用户 发帖 18 积分 23
感谢楼上的朋友,但似乎还没有真正明白我的意思,或许怪我,没有认真说清楚,其实d:\user\1或d:\user\2目录下,不止我给出的两个文件夹,还有很多的,我要说的是,处于他们下边的文件夹名称都是与I:里的文件夹对应相同的,另外,后面的文件夹是期号,也不仅仅是0812,还有0811,0810,0901,0902等很多的文件夹。转换过程中不需要再输入什么,直接到位。
第4楼 sea1112 发表于 2008-11-30 20:31
初级用户 发帖 119 积分 131 来自 gz
Originally posted by czzp2004 at 2008-11-30 08:18 PM:
感谢楼上的朋友,但似乎还没有真正明白我的意思,或许怪我,没有认真说清楚,其实d:\user\1或d:\user\2目录下,不止我给出的两个文件夹,还有很多的 ...


你说的我还是不明白,能说清你的思路吗
你是想做同步多个目录吗?这就用不上日期目录了,日期目录是备份用的吗?

你说“并保证网络服务器数据的同步更新,为方便及时的访问网络驱动器的指定目录”

本机内容=服务器内容

又那来要“及时的访问网络驱动器的指定目录”

做两机文件内容相同,还不如直接用服务器读写,加个时间备份就行了。

[ Last edited by sea1112 on 2008-11-30 at 20:37 ]
第5楼 tireless 发表于 2008-11-30 23:33
银牌会员 发帖 1,122 积分 2,025
把这个批处理放到 %windir% 目录,要切换目录时输入此批处理名字即可:

没有切换过的目录,会全盘扫描一次。如果不想扫描,可以手工把那些互换的路径添加到 %windir%\SameFolder.txt 中。

按以下格式,一行一条:

h:\th\user\1\eeffg\0812=h:\th\user\3\abcd\0812
d:\user\1\abcd\0812=d:\user\2\eeffg\0812
...


(SameFolder.txt 的最后一行一定要留空!)



[ Last edited by tireless on 2008-12-1 at 21:36 ]
第6楼 czzp2004 发表于 2008-12-01 19:16
初级用户 发帖 18 积分 23
感谢楼上的朋友,请教两个问题,你的代码中"%cd%.cndos"是什么意思呢,请教!还有,用for命令查找文件快一些呢,还是dir命令快?
测试了一下,发现有问题了。如果在同一盘符中有相同的文件夹名称,就会进入那个文件夹,而不是网络驱动器的文件夹。
比如:在d:\user\1\cbxb\0901时运行,会进入d:\user\1\gk\0901,而不是i:\th\user\2\cbxb\0901
还有好像也有这种可能的,此时在d:\user\1\cbxb\0901时运行,也可能到i:\th\user\1\gk\0901下。(因为此时我把你的代码搜索全部驱动器改成只搜索I盘符)
当然,如果事先在samefolder.txt中已经输入了两个文件夹名称是不会出现这样的情况的!

[ Last edited by czzp2004 on 2008-12-1 at 19:42 ]
第7楼 czzp2004 发表于 2008-12-01 19:33
初级用户 发帖 18 积分 23
Originally posted by sea1112 at 2008-11-30 08:31 PM:


你说的我还是不明白,能说清你的思路吗
你是想做同步多个目录吗?这就用不上日期目录了,日期目录是备份用的吗?

你说“并保证网络服务器 ...

感谢你,热心的朋友!

服务器与我们机器的文件是不完全一样的,我们只是把最终的文件要复制到服务器上,等于说修改了文件后,马上就拷贝一份到服务器上。当然,修改嘛还是自己机器上方便,服务器访问太慢了。只是服务器上的路径前半部分与本地机不同,比如:本地机 d:\user\1 服务器可能是 h:\th\user\2,后面的路径都是一样的。就这样的情况!
第8楼 tireless 发表于 2008-12-01 21:03
银牌会员 发帖 1,122 积分 2,025
1、
代码中"%cd%.cndos"是什么意思

用来获取当前文件夹的名称。

2、
用for命令查找文件快一些呢,还是dir命令快?

我认为是 dir,因为如果 for 中不是用通配符查找,for 会把所有文件(夹)都列出来。

5楼中用 for 是因为处理了特殊情况——如果文件夹在根目录下,dir 盘符:\文件夹 会直接进入那个文件夹,要过滤就比较麻烦。不过你的文件夹不会在盘符根目录下吧?

---------
只在 D 盘与 I 盘切换?
第9楼 tireless 发表于 2008-12-01 21:48
银牌会员 发帖 1,122 积分 2,025
看这个符合要求不?带参数 /e 运行,是打开 %windir%\SameFolder.txt。
第10楼 czzp2004 发表于 2008-12-02 21:27
初级用户 发帖 18 积分 23
感谢楼上的朋友(tireless),测试了一下,好像"/e"参数不加也会读取SameFolder.txt文件,另外,还是有这样的问题(现在不会进入到相同盘符的同名目录了。但还是会进入,比如:d:\user\1\aa\0901,会进入到i:\th\user\2\gk\0901。估计代码是测试匹配了0901,不好意思。我这样猜的!其实目录树中,aa,gk等这一级的目录名是唯一的,而在下一级中,还有许多的期数目录。如aa\0901,aa\0809,aa\0810,等。在gk目录中,同样也是gk\0901,gk\0808,gk\0902等。这些0901不是唯一的!
第11楼 tireless 发表于 2008-12-05 00:00
银牌会员 发帖 1,122 积分 2,025
『第 6 楼』:

如果在同一盘符中有相同的文件夹名称,就会进入那个文件夹,


『第 10 楼』:

现在不会进入到相同盘符的同名目录了


晕了,那到底要不要进入相同盘符的目录?
第12楼 czzp2004 发表于 2008-12-05 20:22
初级用户 发帖 18 积分 23
我上面所说的相同盘符的同名目录指的是0901一级的。比如,d:\user\1\gk\0901,d:\user\2\cd\0901。不同的文件夹里都有这个0901,我称之为相同。(即名称相同).现在的问题是,有这种情况,比如现在在d:\user\1\gk\0901目录下,执行代码文件后,有可能会进入到 i:\user\2\cd\0901里面,而不是i:\user\2\gk\0901里面。其实在gk这一级的目录,名称都是唯一的,而在他们下一级,都会有0809,0901等一系列的目录!说实话,真的很感谢你了,为了解决问题付出了很多的时间,谢谢了!
其实我需要达到这样的要求:比如我现在处于DOS状态,路径为:d:\user\x(x代表1或2)\gk\0901,执行代码后直接进入到 i:\th\user\y(y代表1,或2,或3)\gk\0901里。现在代码的问题是运行后 进入的可能不是\gk\0901,而是其它目录下的0901.

[ Last edited by czzp2004 on 2008-12-5 at 21:05 ]
第13楼 tireless 发表于 2008-12-05 23:37
银牌会员 发帖 1,122 积分 2,025
看是不是这样


[ Last edited by tireless on 2008-12-6 at 12:23 ]
第14楼 czzp2004 发表于 2008-12-06 13:17
初级用户 发帖 18 积分 23
感谢你,tireless,现在能达到我的要求了,测试了一下,没有发现什么问题。感谢!另外,对于代码,还想弄明白点,有些问题请教!
(1) %Up:\\=%.cndos 是什么意思呢,.cndos是在什么情况下用呢?
(2) goto :eof 这一句是转向哪里呢?
(3) >>%Txt% echo %cd%=%cd2% 按理说顺序好像反了,应该>>在后面呀,不明白!
第15楼 tireless 发表于 2008-12-06 16:10
银牌会员 发帖 1,122 积分 2,025
(1)

在 for 中,有这个用法:
%~nI - 仅将 %I 扩充到一个文件名

所以:
C:\WINDOWS\system32>echo %cd%
C:\WINDOWS\system32

C:\WINDOWS\system32>for %a in ("%cd%.cndos") do @echo 当前文件夹是: %~na
当前文件夹是: system32

.cndos 是本论坛的域名啊 :),只是一个随意的后缀。

%Up:\\=% 把变量 Up 中的 \\ 替换为空,这是 set 的一个用法。

(2)

goto :eof 主要用于结束“子程序”(准确说是“标签”),并且好像只有使用 call 时才有必要使用。例如:



其他情况 goto :eof 的功能都相当于 exit /b。

(3)

参考:

关于重定向的写法,为什么>file echo abc?
http://www.cn-dos.net/forum/viewthread.php?tid=44488

[ Last edited by tireless on 2008-12-6 at 16:12 ]
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023