无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 7909|回复: 12
打印 上一主题 下一主题

[求助] batch 的超级难题, 请大家不吝赐教

[复制链接]
跳转到指定楼层
1#
发表于 2005-5-30 01:57:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教大家, 如何编写 batch file, 得知 batch file 所在的位置 (路径)?
例如: c:\batch\test.bat
path 设定了 c:\batch
我可以在任何一处位置, 输入 test 来执行 test.bat
问题是: 我如何得知 test.bat 是在 c:\batch 下的?
使用的平台是 msdos 7.1
请大家指教
(P.S. win2k, xp 有一个参数 "~dp0" 可以取得 batch file 所在位置, 但 msdos 7.1 没有这个参数)
2#
发表于 2005-5-30 10:40:52 | 只看该作者

[求助] batch 的超级难题, 请大家不吝赐教

用第三方工具,例如Horst的Fpath。
回复

使用道具 举报

3#
 楼主| 发表于 2005-5-30 17:22:53 | 只看该作者

[求助] batch 的超级难题, 请大家不吝赐教

@Climbing
但 fpath 是搜寻工具, 虽然可以在某方面达到目的, 但不够 "直接",
未知有否更 "直接" 的方法可以返回 batch 的所在位置?
先谢!
回复

使用道具 举报

4#
发表于 2005-5-31 19:13:59 | 只看该作者

[求助] batch 的超级难题, 请大家不吝赐教

我来试试

c:\batch\test.bat为下面的话
echo %0
可以运行c:\batch\test.bat得到c:\batch\test.bat
如果觉得这个结果除了目录多了文件名,可以多写几句

cd>t|type t
可以运行c:\batch\test.bat得到c:\batch
回复

使用道具 举报

5#
发表于 2005-5-31 19:16:36 | 只看该作者

[求助] batch 的超级难题, 请大家不吝赐教

都不是很好,看看谁有更好的
回复

使用道具 举报

6#
 楼主| 发表于 2005-6-2 02:39:45 | 只看该作者

[求助] batch 的超级难题, 请大家不吝赐教

@我是神仙
对不起, 你的方法不太可行的, 因为若已设定 path c:\batch, 任何地方也可运行 "test.bat", %0 的结果亦只是 "test.bat", 仍是抓不到所在路径的.
回复

使用道具 举报

7#
发表于 2005-6-2 11:16:31 | 只看该作者

[求助] batch 的超级难题, 请大家不吝赐教

楼主的目的是什么? 看得有点晕!
回复

使用道具 举报

8#
发表于 2005-6-2 11:48:36 | 只看该作者

[求助] batch 的超级难题, 请大家不吝赐教

[这个贴子最后由xusen在 2005/06/02 11:49am 第 1 次编辑]

是哦,楼主想要得到的结果有和用意,是为何程序铺底。
回复

使用道具 举报

9#
发表于 2005-6-2 16:19:06 | 只看该作者

[求助] batch 的超级难题, 请大家不吝赐教

用cd可以得到bat的路径,但是无法传递给其它,除非存到文件,再用第三方软件读取,不过这样好麻烦。
回复

使用道具 举报

10#
发表于 2005-6-11 15:58:13 | 只看该作者

[求助] batch 的超级难题, 请大家不吝赐教

98就是麻烦.
在2000或XP里就简单了,echo %~f0就搞定了.
回复

使用道具 举报

11#
发表于 2005-6-22 10:41:29 | 只看该作者

[求助] batch 的超级难题, 请大家不吝赐教

98和DOS下批处理的所在路径无非是几种情况:
1、当前盘当前路径;
2、命令行指定的路径;
3、%path%指定路径之一;
可以对以上情况分别判定:
if exist %0.bat cd
:: 存在于当前路径
if exist %0 echo %0
:: 存在于命令行指定的路径
for %%p in (%path%) do if exist %%p.\%0.bat echo %%p
for %%p in (%path%) do if exist %%p.\%0 echo %%p
:: 存在于%path%指定的路径
以上的程序存在个小问题,就是带扩展名运行当前路径下的批处理或者不带扩展名运行指定路径下的批处理时,程序会判断错误,因为一般人很少这样使用,所以可以忽略。无法忽略时,可以使用find检查%0是否含有路径特有的反斜线。
echo %0|find "\">nul
if errorlevel 1 if exist %0.bat cd
if errorlevel 1 if exist %0 cd
:: 存在于当前路径
if not errorlevel 1 if exist %0.bat echo %0
if not errorlevel 1 if exist %0 echo %0
:: 存在于命令行指定的路径
回复

使用道具 举报

12#
发表于 2005-6-22 13:57:23 | 只看该作者

[求助] batch 的超级难题, 请大家不吝赐教

用dir /a /s不知道行不行
回复

使用道具 举报

13#
发表于 2005-6-23 09:06:58 | 只看该作者

[求助] batch 的超级难题, 请大家不吝赐教

Re Brglng:
  用 dir /a /s 首先有低效率的问题,其次它还会牵涉到分区盘符遍历的问题,另外这也浪费了系统的许多资源。
Re mactable:
  另外问题中还有一个相对路径转绝对路径的子问题,这可以使用 dir 来解决,假设包括文件名的完整相对路径已设置到变量 %mypath% 中,此时
dir %mypath%|find " Directory of "> _convpth.bat
echo set convpath=%%2>Directory.bat
call _convpth.bat
echo My path:%convpath%
for %%f in (_convpth.bat* Directory.bat*) do del %%f
  注意:此程序需要运行在英文代码页的命令行环境下,如果路径中含有空格,则需要对程序进行进一步改进。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-27 12:42

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表