![]() |
中国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: 你说的我还是不明白,能说清你的思路吗 你是想做同步多个目录吗?这就用不上日期目录了,日期目录是备份用的吗? 你说“并保证网络服务器数据的同步更新,为方便及时的访问网络驱动器的指定目录” 本机内容=服务器内容 又那来要“及时的访问网络驱动器的指定目录” 做两机文件内容相同,还不如直接用服务器读写,加个时间备份就行了。 [ 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 (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% .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 |