中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » (已结)请问如何使得批处理执行完后自动返回之前的目录?
作者:
标题: (已结)请问如何使得批处理执行完后自动返回之前的目录? 上一主题 | 下一主题
voiL
中级用户





积分 384
发帖 189
注册 2005-10-19
状态 离线
『楼 主』:  (已结)请问如何使得批处理执行完后自动返回之前的目录?

运行环境:Win2000

我的目的是想让批处理执行完后自动返回之前的目录准备执行下一个批处理.

可有什么办法实现?

是否可以在批处理执行时把当前路径设置成变量,而后调用??

该执行该如何实现??

注:非不得已的情况下,请不要使用外部工具.

------------------------------
以下是chenhui530兄所给出的解决方案
(原贴地址:http://www.cn-dos.net/forum/viewthread.php?tid=15228&fpage=1)


  Quote:
set a="%cd%"
for %%a in (%a%) do set b=%%~da
for %%b in (%a%) do set c=%%~npb
::你切换盘符后运行的代码
...
::你需要返回源路径的代码
%b%
cd\
cd %c%

现有一点不明白:

set b=%%~da
set c=%%~npb


中的danpb是什么意思??

我把它替换成其它的字母后发现无法返回之前的目录了.

请各位高手指点一二.

[ Last edited by voiL on 2005-11-2 at 14:38 ]

2005-10-28 18:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4633
发帖 2236
注册 2005-1-30
状态 离线
『第 2 楼』:  

参考一下这里吧:

批处理如何获取当前所在路径信息(点击进入)



DOS倒下了,但永远不死
DOS NEVER DIES !

投票调查:
http://www.cn-dos.net/forum/viewthread.php?tid=46187

本人尚未解决的疑难问题:
http://www.cn-dos.net/forum/viewthread.php?tid=15135
http://www.cn-dos.net/forum/viewthread.php?tid=47663
http://www.cn-dos.net/forum/viewthread.php?tid=48747
2005-10-28 19:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
voiL
中级用户





积分 384
发帖 189
注册 2005-10-19
状态 离线
『第 3 楼』:  

谢谢DOSforever和tigerpower两位兄弟.

两种方法我先试试,如有问题再另行请教.

谢!

2005-10-28 21:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
voiL
中级用户





积分 384
发帖 189
注册 2005-10-19
状态 离线
『第 4 楼』:  

对于2楼DOSforever兄给出的资料,我试了一下,XP下确实可行.

但还有一点小问题需要请教一下.(写在1楼)

2005-10-30 11:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
smileseeker
中级用户




积分 316
发帖 83
注册 2005-3-1
状态 离线
『第 5 楼』:  

set b=%%~da 用变量b来保存驱动器号
set c=%%~npb用变量c来保存和文件名

不过如果只是保存目录应该只要set c=%%~pb不用%%~npb吧

2005-10-30 12:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
smileseeker
中级用户




积分 316
发帖 83
注册 2005-3-1
状态 离线
『第 6 楼』:  FOR 变量参照的替换增强

%~fI        - 将 %I 扩充到一个完全合格的路径名
%~dI        - 仅将 %I 扩充到一个驱动器号
%~pI        - 仅将 %I 扩充到一个路径
%~nI        - 仅将 %I 扩充到一个文件名
%~xI        - 仅将 %I 扩充到一个文件扩展名
%~sI        - 扩充的路径只含有短名
%~aI        - 将 %I 扩充到文件的文件属性
%~tI        - 将 %I 扩充到文件的日期/时间
%~zI        - 将 %I 扩充到文件的大小
%~$PATH:I   - 查找列在路径环境变量的目录,并将 %I 扩充
               到找到的第一个完全合格的名称。如果环境变量名
               未被定义,或者没有找到文件,此组合键会扩充到
               空字符串

组合修饰符来得到多重结果:

%~dpI       - 仅将 %I 扩充到一个驱动器号和路径
%~nxI       - 仅将 %I 扩充到一个文件名和扩展名
%~fsI       - 仅将 %I 扩充到一个带有短名的完整路径名
%~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充
               到找到的第一个驱动器号和路径。
%~ftzaI     - 将 %I 扩充到类似输出线路的 DIR

2005-10-30 12:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
voiL
中级用户





积分 384
发帖 189
注册 2005-10-19
状态 离线
『第 7 楼』:  

理解了,感谢smileseeker兄弟.

2005-10-30 14:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 8 楼』:  

Re smileseeker:

      %%~npb 中的 n 是必要的,否则就会替换成上一级目录的路径,而且就现在的使用状况来看,表示扩展名的 x 也是需要的,如 %%~pnxb ,否则就会无法正确替换名字中包含句点的目录。

Re chenhui530:

      兄的方案可以略作更新:
for %%p in (%cd%) do set _retcmd=%%~dp ^&^& cd %%~pnxp
::你切换盘符和路径后运行的代码
:: ...
%_retcmd%
set _retcmd=
::你需要返回源路径的代码
当然,更简单的方法是直接保存原来的当前路径,在想返回时用 cd /d 这个命令即可。
set _oldpath=%cd%
::你切换盘符和路径后运行的代码
:: ...
cd /d %_oldpath%
::你需要返回源路径的代码
需要注明的是,上述方法仅适用于 NT CMD 环境,在 MSDOS6/7 和 Win9x 命令行都是无效的。而在 NT CMD 环境下,使用 tigerpower 兄提到的 pushd/popd 是最简单实用的方案,上述的方案只是在某些特殊情况下才会使用到。另外,在MSDOS 和Win9x 命令行环境下,也早已出现许多类似 pushd/popd 功能的第三方支持工具,如果找不到这些工具,那可以参考2楼链接中我所写的程序,其中利用了内部命令 prompt 。

[ Last edited by willsort on 2005-10-30 at 15:14 ]



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2005-10-30 15:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
smileseeker
中级用户




积分 316
发帖 83
注册 2005-3-1
状态 离线
『第 9 楼』:  

willsort兄的回帖就是能让兄弟们学到很多东西

以前只知道才cd\和cd  路径 不知道还有cd  /d 哈哈

不过小弟还有一个问题

为什么当路径中有"."时

%~npi就不会替换到原来的路径

而只是 路径中"."之前的一部分

2005-10-30 18:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 10 楼』:  

Re smileseeker:

      在微软的操作系统中(包括DOS和Windows),文件名或者目录名中的最后一个 "." 是主文件名和扩展名的分隔符,因为%~npi 没有指定替换扩展名,因此 "." 以及其后的扩展名被省略。

      因为在早期的系统应用中,目录名中很少带有扩展名,所以 %~npi 的用法在大多数情况下可以正常工作,但是随着长文件名的出现和网络的广泛应用,目录名中带有句点的情形大量出现,尽管句点后的文字大多数不是作为扩展名来应用的,但是我们在编程实践中,仍然需要按照系统的规则来进行,排除我们所能预测到各种各样的例外情况,以增强程序的健壮性。



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2005-10-30 19:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: