Board logo

标题: [系统相关] 批处理文件所在路径,已经添至系统变量PATH中,但运行时%CD%却不是该路径? [打印本页]

作者: mebanna    时间: 2014-3-19 13:20     标题: 批处理文件所在路径,已经添至系统变量PATH中,但运行时%CD%却不是该路径?

OS:Win7

自己写了些批处理文件,集中保存在下面路径:
  1. E:\MyBatch
复制代码
然后手动添加该路径到系统变量中了——我的电脑-属性-高级-变量-Path。

现在通过快捷键Ctrl-R调出“运行”对话框,输入我的批处理文件名,能够成功启动这些批处理。
但问题是,这些批处理运行过程中,显示当前运行目录为:
  1. C:\Users\Administrator
复制代码
请问:当前运行目录,为何不是这些批处理所在目录呢?
作者: apang    时间: 2014-3-19 14:00

"当前工作目录" 和 "批处理文件所在目录" 不是相同的

"当前工作目录" 是可以改变的,比如右键以管理员权限运行后,%cd%变成%windir%\system32

再比如在 "运行" 中输入批处理文件名,%cd%为默认的 %userprofile%

要显示批处理文件所在目录,用 %~dp0 就好
作者: DAIC    时间: 2014-3-19 14:19

把你的批处理代码发出来看看
作者: mebanna    时间: 2014-3-19 15:03

本帖最后由 mebanna 于 2014-3-19 15:11 编辑

感谢回复!
回复 3# DAIC

我写了个测试文件,问题依旧。
  1. @ECHO OFF
  2. ECHO %CD%
  3. ECHO %~dp0
  4. PAUSE
复制代码
运行后,显示当前运行目录(%CD%)为“C:\Users\Administrator”,而不是我希望的“E:\MyBatch”。
变量“%~dp0”,倒是显示为“E:\MyBatch”。可我需要的是【当前运行目录】为该值啊。



回复 2# apang
怎样才能实现——从运行栏中启动批处理时,当前运行路径,为该批处理文件所在路径呢?
作者: apang    时间: 2014-3-19 15:17

回复 4# mebanna
  1. @ECHO OFF
  2. pushd "%~dp0"
  3. ECHO %CD%
  4. ECHO %~dp0
  5. PAUSE
复制代码

作者: mebanna    时间: 2014-3-30 19:03

回复 5# apang


    感谢回复!

    其实我并不是为了显示“批处理文件所在路径”。
    而是我的批处理文件中很多指令,都是用【相对路径】编写的——即,假定【工作目录】为【批处理文件所在目录】。
    像现在这样工作目录不等于批处理所在目录,就会导致批处理指令中所有设计【相对路径】的指令失效。

    请问有什么办法,能让批处理的【工作目录】与【批处理文件所在目录】相一致吗?
作者: apang    时间: 2014-3-30 20:35

回复 6# mebanna


1.已经告诉你了,“当前工作目录”和“批处理文件所在目录”两码事,鸡是鸡,鸭是鸭,你非要让鸡下鸭蛋,鸡妈妈不愿意,鸭爸爸也不会干

2.#5代码只是提示你,通过cd /d 或 pushd 可以切换工作目录到批处理文件所在目录。切换过去后,dir *.txt 或 type a.txt 就是相对于批处理文件所在目录了
作者: mebanna    时间: 2014-4-2 13:48

回复 7# apang


    唉,我是想有没有什么手动设置一下windows系统参数的办法,能让工作目录和批处理所在目录关联起来。这样我就不用去手动逐个修改批处理文件了。因为有好多批处理文件呃..
非常感谢!
作者: 753239196    时间: 2014-5-24 08:00

在设置里面有个PATH环境变量设置, 不知道你说是否是这个?
作者: czjt1234    时间: 2014-5-24 08:36

本帖最后由 czjt1234 于 2014-5-24 08:49 编辑

导入以下注册表
  1. Windows Registry Editor Version 5.00
  2. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]
  3. "AutoRun"="cd /d E:\\MyBatch"
复制代码
测试发现不行,每条指令前都执行。

要么你运行

start /d E:\MyBatch xxx.bat

要么你在桌面上新建一个批处理
  1. @echo off
  2. start /d E:\MyBatch cmd /k
复制代码
以后要运行批处理,就双击这个批处理,不要在"运行"里了




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2