中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批处理如何获取当前所在路径信息
« [1] [2] »
作者:
标题: 批处理如何获取当前所在路径信息 取消高亮 | 上一主题 | 下一主题
darkpiggy
初级用户




积分 119
发帖 6
注册 2005-3-1
状态 离线
『楼 主』:  批处理如何获取当前所在路径信息


各位老大,有问题求教!

是这样的一个问题,比如我先要保存当前的路径,然后切换路径到A盘执行命令,执行完毕后

我需要将路径切换到刚才我保存到的路径,这个批处理该如何写啊?

请各位老大帮帮忙,谢谢啊!

2005-3-2 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 2 楼』:  

论坛最近不知道为什么很不稳定啊!刚才我写了很详细的一大片没发成功!现在重新给你发来
下次你在求助发帖的时候首先要说明运行环境.还有条件比如说在你知道源路径的情况下直接输入源路径所在的盘就能回到源路径.但是在不知道源路径的情况下,也就是在批处理中执行的时候,如果是NT以上的操作系统的话可以使用下面代码:set a="%cd%"
for %%a in (%a%) do set b=%%~da
for %%b in (%a%) do set c=%%~npb
::你切换盘符后运行的代码
...
::你需要返回源路径的代码
%b%
cd\
cd %c%

如果是在纯DOS或者是在98的DOS下的话可以使用第三放工具strings.com在本论坛软件站可以下载到.由于本人还有事情不能切换到DOS下给你求证.所以给你strings.com的一些用法希望对你有用,自己也动动手也好.1.STRINGS [目标变量=]LEFT 源字符串 要取的字符数量  〈从左边取源字符串的指定字符数量〉
2.STRINGS [目标变量=]RIGHT 源字符串 要取的字符数量 〈从右边取源字符串的指定字符数量〉
3.STRINGS [目标变量=]MID 源字符串 起止数,终止数     〈从中央取源字符串〉
4.STRINGS [目标变量=]LENGTH 源字符串        〈返回源字符串的字符长度〉         
5.STRINGS [目标变量=]FIND 源字符串 字符     〈从源字符中查找指定的字符〉
6.STRINGS [目标变量=]FINDC 源字符串 字符    〈从源字符中查找指定的字符,区分大小写〉
7.STRINGS [目标变量=]LOWER 源字符串       〈将源字符串中的大写字母转换成小写字母〉
8.STRINGS [目标变量=]UPPER 源字符串       〈将源字符串中的小写字母转换成大写字母〉
9.STRINGS [目标变量=]CHAR 字符 [字符1] [字符2]... 〈将字符转换成ASCII数字〉
10、STRINGS [目标变量=]VAL 数字 [数字1] [数字2]...  〈将数字转换成ASCII字符〉
11、STRINGS [目标变量=]FILEDRIVE 文件名             〈返回文件名所在的盘符〉
12、STRINGS [目标变量=]FILEDIR 文件名               〈返回文件名所在的目录〉
13、STRINGS [目标变量=]FILENAME 源文件名    〈返回源文件名的文件名,不要扩展名〉
14、STRINGS [目标变量=]FILEEXT  源文件名     〈只返回源文件名的扩展名〉
15、STRINGS [目标变量=]ADDCOMMAS 数字    〈将数字每隔三位用逗号隔开〉
16、STRINGS [目标变量=]REPEAT 重复多少,字符或数字 〈将字符或数字进行指定的重复〉
17、STRINGS [目标变量=]READ 文件名,行数           〈读取文件中指定行数的内容〉
18、STRINGS [目标变量=]WRITE 文件名,字符          〈将字符追加到文件中〉
19、STRINGS [目标变量=]FILESIZE 文件名            〈返回文件的大小〉
20、STRINGS [目标变量=]LINESIZE 文件名            〈返回文件内容的总行数〉
21、STRINGS [目标变量=]TRUENAME 文件名            〈返回文件的完整路径〉
22、STRINGS [目标变量=]FILEDATE 文件名            〈返回文件的修改日期〉
23、STRINGS [目标变量=]FILETIME 文件名            〈返回文件的修改时间〉
24、STRINGS [目标变量=]VER                        〈返回当前系统的DOS版本号〉
25、STRINGS [目标变量=]ASK 提未字符串[,最大输入数][,1=*显示 2=不显示] 〈对话〉
26、STRINGS [目标变量=]INWIN            〈如果在WINDOWS中的DOS窗口中运行则返回1〉
27、STRINGS [目标变量=]ENVFREE     〈返回环境变量空间的空闲字节数〉
28、STRINGS [目标变量=]ENVSIZE       〈返回环境变量空间的总共大小〉
29、STRINGS [目标变量=]TRUEVER      〈返回当前DOS的真实版本号〉
30、STRINGS [目标变量=]FILES            〈返回当前同时访问的文件数量〉
31、STRINGS [目标变量=]LASTDRIVE    〈返回当前系统可以访问最后有效的驱动器字母〉
32、STRINGS [目标变量=]CODEPAGE   〈返回当前系统活动的长文件代码页〉
33、STRINGS [目标变量=]COUNTRY      〈返回当前系统设置的国家代码〉
34、STRINGS [目标变量=]BIOSDATE     〈返回BIOS出厂的日期〉
35、STRINGS [目标变量=]GETKEY        〈返回按键的ASCII代码〉
36、STRINGS [目标变量=]ADD 数字1,数字2[,数字3]...  〈对数字进行+运算〉
37、STRINGS [目标变量=]SUB 数字1,数字2[,数字3]...  〈对数字进行-运算〉
38、STRINGS [目标变量=]MUL 数字1,数字2[,数字3]...  〈对数字进行×运算〉
39、STRINGS [目标变量=]DIV 数字1,数字2[,数字3]...   〈对数字进行÷运算〉
40、STRINGS [目标变量=]AND 数字1,数字2[,数字3]... 〈对数字进行“逻辑与”运算〉
41、STRINGS [目标变量=]OR 数字1,数字2[,数字3]...   〈对数字进行“逻辑或”运算〉
42、STRINGS [目标变量=]NOT 数字1,数字2[,数字3]... 〈对数字进行“逻辑取反”运算〉
43、STRINGS [目标变量=]MEMTOTAL                    〈返回系统总共的常规内存大小〉
44、STRINGS [目标变量=]MEMFREE                     〈返回系统空闲的常规内存大小〉
45、STRINGS [目标变量=]XMSTOTAL                     〈返回系统总共的扩展内存大小〉
46、STRINGS [目标变量=]XMSFREE                      〈返回系统空闲的扩民内存大小〉
47、STRINGS [目标变量=]XMSVER             〈返回当前扩展内存使用的驱动程序的版本号〉
48、STRINGS [目标变量=]EMSTOTAL         〈返回系统总共的扩充内存大小〉
49、STRINGS [目标变量=]EMSFREE           〈返回系统空闲的扩充内存大小〉
50、STRINGS [目标变量=]EMSVER             〈返回当前扩充内存使用的驱动程序的版本号〉
51、STRINGS [目标变量=]STRINGSVER       〈返回STRINGS的版本号〉

   此帖被 +8 点积分     点击查看详情   
评分人:【 bjsh 分数: +8  时间:2007-5-6 10:14




http://www.msfans.net/bbs/
2005-3-2 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
darkpiggy
初级用户




积分 119
发帖 6
注册 2005-3-1
状态 离线
『第 3 楼』:  

谢谢回复!
可是在strings.com的函数里,没有获取当前路径的啊,这个如何处理呢?


2005-3-3 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4639
发帖 2239
注册 2005-1-30
状态 离线
『第 4 楼』:  

如果你用 4DOS / 4NT 的话那一切都太简单了

PUSHD [PATH]

…………

PUSHD [PATH]

……

POPD

…………

POPD

PUSHD 为将当前路径压栈,其中[PATH]为可选项,如果写明具体了 PATH,则将当前路径压栈后转到新的路径下。比如你当前工作目录为 C:\MSDOS,执行 PUSHD E:\PCTOOLS ,则你立刻就处于 E:\PCTOOLS 目录下了,然后你可以任意的转移路径,不管你转了多少次,只要来一句 POPD 就立刻回到你上一次压栈的目录下了。 PUSHD 和 POPD 可以嵌套,但你要注意它们的工作方式是以栈为结构的,如果多次压栈当弹出的时候要注意顺序。如果你只做一次路径切换,且不在同一个盘,那也不必这么“劳师动众”。比如你当前工作目录为 C:\MSDOS ,以后你不管转到哪一个盘的哪一个目录下(C盘的其它路径除外),要回到原来的路径只需 C: 就可以了。跟你说了这么多我忽然发现你要用到这种功能感到非常奇怪,我 BATCH 编到现在几乎自己都从未用过。我不知道你编写什么需要这样使用?

[ Last edited by DOSforever on 2008-2-29 at 01:00 AM ]



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-3-3 00:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 5 楼』:  

楼上应该要对症下药才行难道你要楼主换系统啊对于楼主的问题我等下给出你答案由于现在本人在处理程序一段时间内不能重启机器.我想strings.com应该可以完成你的要求的



http://www.msfans.net/bbs/
2005-3-3 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4639
发帖 2239
注册 2005-1-30
状态 离线
『第 6 楼』:  

你说的一点没错。我的用意就是建议楼主,包括所有使用BATCH的人把都命令解释器统统换成4DOS / 4NT。我相信,没有一个善于编写BATCH的人会不喜欢它,我想你也一定会对它爱不释手。再说只更换个命令解释器怎么能说是换系统呢?如果你不想用,放着就可以了,也不需要去卸载它。这个和你使用第三方工具没什么区别,而且,你每使用它的一个功能,都要到磁盘上去调用它可执行文件一次。尽管现在的机器速度不是以前的所能比的,但我认为还是要有一个优化意识。在这个论坛上,我看到了太多的为BATCH和一些小问题而伤脑筋的帖子,我实在觉得有些事情没有必要绕个大圈子去做,所以,我一直不余遗力地向大家推荐这个好东西。类似这样的话我已经重复过多次了。当然,我建议只是我建议,用不用是别人的事。



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-3-3 00:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
darkpiggy
初级用户




积分 119
发帖 6
注册 2005-3-1
状态 离线
『第 7 楼』:  

如果DOS里有如bash的shell的话,我睡着了都会笑醒的

2005-3-3 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
darkpiggy
初级用户




积分 119
发帖 6
注册 2005-3-1
状态 离线
『第 8 楼』:  

对了,求教dosforever ,4DOS / 4NT是个啥东东,不要鄙视我,我是新手虽然我从96年就开始用电脑了,但是DOS好久没碰了,新东西不太清楚了4DOS / 4NT哪里有下载的,如何使用?给个链接吧,谢谢啊~~~~我是这几天在做一个支持NTFS格式的,可以从NTFS分区挂载ISO的DOS启动盘才对DOS感兴趣的,现在手上项目很紧,我还抽出时间来玩DOS,不容易啊!!!!所以请大家多帮帮我啊~~[em06]

2005-3-3 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
darkpiggy
初级用户




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

给大家看一下我的mount.bat文件吧,还有问题需要解决,就是如何判断一个盘符已经被占用?代码里边这一句肯定是错的if exist "%2" goto drvexist,这个如何修改呢?谢谢~~

@echo off
if "%1" == "" goto use
if "%2" == "" goto use
if not exist "%1" goto noexist
if exist "%2" goto drvexist
A:
LH Smartdrv 4088 4088 >NUL
SHSUCDHD /F:%1 >NUL
SHSUCDX /D:SHSU-CDH,%2 >NUL
cls
ECHO,
ECHO 【ISO光盘镜像文件安装向导】
%2
DIR/W
ECHO,
ECHO  ISO光盘镜像文件已经安装...
ECHO,
goto end
:noexist
echo 文件 %1 不存在,请重新指定镜像文件!
goto end
:use
echo 使用方法: mount 映像文件名 驱动器号
goto end
:drvexist
echo 驱动器名称 %2 已经被使用,请重新指定驱动器名称!
goto end
:end

2005-3-3 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4639
发帖 2239
注册 2005-1-30
状态 离线
『第 10 楼』:  

呵呵,你多心了,我怎么会想到鄙视你呢?谁都不可能样样都懂,我也有许多不懂的地方要向别人请教。我们来论坛的目的就是相互请教,相互帮助,共同进步的。我先大概的和你介绍一下:
4DOS / 4NT 是 JP Software 公司出品的命令解释器,也就是 OS Shell 。当然,我认为只是在纯 DOS 下作为 Shell 使用,在 Windows 下应该看作是一个命令行环境。其实它也不是什么新东西,只是你以前没有注意到罢了。我最早接触 4DOS 是在 Norton 8.0 中所带的 NDOS ,实际上就是 Norton 买了 JP Software 的 4DOS 重命名为 NDOS ,这就和 Microsoft 买了 Norton 的 speedisk 叫作 defrag 一样的道理。最初的 4DOS 命令解释器只有 DOS 环境下的 4DOS.COM (尽管是 .COM,实际上是 .EXE 结构的文件,我想大概是为了保持传统才命名为 .COM的吧),后来随着 Windows 的流行, JP Software 又推出了 Windows 环境下的 4DOS —— 叫作 4NT ,不要被它的名字所迷惑,以为只能在 NT 下使用。它又分为 ASCII 版和 Unicode 版,前者是用于 Win 98/98SE/ME 的,后者是用于 Win NT/2000/XP/2003 的。当然 DOS 下的 4DOS 也可以在 Win9X 下使用,在 NT 系列下我没用过,不清楚,估计运行还是可以运行的,只是某些命令不能正常使用。现在 JP Software 已经放弃了 DOS 下 4DOS 的版权,大家可以 FREE 使用了!关于我对 4DOS 家族的其它简单介绍和它的下载地址你可以先看一下这里:

http://www.cn-dos.net/forum/viewthread.php?tid=15111

和这里:

http://www.cn-dos.net/forum/viewthread.php?tid=15214

权威、全面的介绍那当然是它的官方网站了。

接下来我们来讨论一下你的BATCH问题:
你说的“从NTFS分区挂载ISO的DOS启动盘”我从来没用过,不怕各位笑话,我连ISO文件都没用过,根据你提供的原始文件和我的理解来看,你是从A盘执行SHSUCDHD把ISO文件映射为一个光驱,然后再用SHSUCDX把光驱映射为一个逻辑盘符,然后就转到新生成的逻辑盘上,再给大家看看,“瞧,我已经在新逻辑盘上列文件了。”是不是这意思?假如是的话,我还有几点疑问:为什么你非要到A盘上去执行Smartdrv、SHSUCDHD、SHSUCDX?难道这三个文件和ISO文件放到硬盘上就不能执行吗?比如:
c:\windows\command\Smartdrv 32768
c:\windows\command\SHSUCDHD /F:%1 >NUL
c:\windows\command\SHSUCDX /D:SHSU-CDH,%2 >NUL

我想先把我的问题搞清楚才能作下一步讨论。还有, Smartdrv 不需要 LH,只要你有足够的 UMB 它自己就能够 LH,当然你 LH 它也不会报错。在第一次启动 Smartdrv 的时候,如果你不想看到什么信息也不需要用 >NUL 的方法,因为 Smartdrv 在第一次启动的时候,缺省的就是没有任何提示信息,你要它有提示信息还要加 /V 参数。如果你的内存足够大比如有64M以上的话,不妨把 Smartdrv 的缓存区域开得大一点,反正不用也是浪费。



修正链接

[ Last edited by DOSforever on 2008-6-4 at 03:49 AM ]

   此帖被 +8 点积分     点击查看详情   
评分人:【 bjsh 分数: +8  时间:2007-5-6 10:15




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-3-3 00:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 11 楼』:  

真晕啊又没发出去气死我了最近论坛究竟是怎么了啊?



http://www.msfans.net/bbs/
2005-3-4 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 12 楼』:  

楼住看来还没找到答案我看我还是给你答案.strings a=filedrive pp.bat
strings b=filedir pp.bat
::strings x=filename pp.bat 如果你需要知道原文件的完整路径这个必须你只需要去掉前面的"::"
::strings c=fileext pp.bat 如果你需要知道原文件的完整路径这个必须你只需要去掉前面的"::"
set ypath=%a%%b%
::set d=%a%%b%\%x%.%c% 这是完整的路径
::你切换盘符后运行的代码
...
::你需要返回源路径的代码
%a%
cd\
cd %ypath%




http://www.msfans.net/bbs/
2005-3-4 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
bush
银牌会员




积分 2165
发帖 730
注册 2004-4-21
状态 离线
『第 13 楼』:  

string这个东西好!

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

Batchinger


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

Re All:

    关于工具的选择大家讨论了这么多,其实这不过是个人习惯和使用场合的不同而造成的分歧,我个人编写批处理便很少使用第三方工具,原因无它,主要是因为“将看似不可能的事情变为可能”可以产生一种无与伦比的快乐。下面给出一个不依赖环境的批处理示例吧,在WinXP/DOS7测试通过。
@echo off
echo Current path is:
cd
pause
echo exit | %comspec% /k prompt $N:$_cd $P$_ | find "exit" /v > %temp%.\~retpath.bat
c:
cd\windows
echo Current path is:
cd
pause
for %%c in (call del) do %%c %temp%.\~retpath.bat
echo Current path is:
cd
[ Last edited by willsort on 2005-10-30 at 13:55 ]



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





积分 4639
发帖 2239
注册 2005-1-30
状态 离线
『第 15 楼』:  

呵呵,“笑天”厉害,能够在有限的条件下实现相同的功能堪称高手。不愧于Batchinger的称号。本人受益非浅!但我的一个思想就是在编写BATCH的时候尽可能少使用外部命令和少涉及到磁盘I/O操作。当然现在的机器速度完全可以忽略这个因素,但我仍然保持这一习惯。至于你所说的“少使用第三方工具”。我的看法是其实这个“第三方”只是对厂商而言是个很清晰的概念,对于我们用户来说这个界限是很模糊的。对我们来说,只要东西好使,是无所谓什么第三方不第三方的。比如原来MS-DOS中是没有反病毒、磁盘整理和全屏界面备份这些工具的,microsoft无非是把CPAV拿进来变成MSAV和VSAFE,把SPEEDISK拿进来变成DEFRAG,把NORTON BACKUP拿进来变成MSBACKUP。难道microsoft在把这些包含进它的DOS之前我们就不能用这些“第三方”工具了吗?虽说你只使用了DOS自带的工具,但毕竟“绕了个大圈子”。瞧,如果使用4DOS的话多简洁,两句话就解决问题了,而且全部都是在内存中操作。在少化力气取得同样的效果,而且更省资源的情况下有什么不好呢?我相信,对于你来说使用4DOS一定会更加得心应手,如果你能用它来BATCHING的话可以说是“宝剑配英雄”!另外,我对你在%temp%后面加一个“ . ”感到不解,如此一来岂不成了语法错误?



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-3-7 00:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: