首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改目录会使%~dp0停止工作

更改目录会使%~dp0停止工作
EN

Stack Overflow用户
提问于 2012-04-05 21:35:32
回答 2查看 4.9K关注 0票数 1

我在C:\驱动器上有两个批处理文件,正在使用%~dp0命令使用第一个脚本的路径来制作第二个批处理脚本的副本:

代码语言:javascript
复制
COPY %~dp0"Hello World.BAT" C:\"Hello World.bak"

在脚本的早期,我被要求切换到C:\根目录下的一个子目录,但这会使上面的复制命令停止工作,我得到的错误是“无法找到文件”。如果我停留在C:\的根目录中,复制命令就能完美地工作。你知道为什么会发生这种情况吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-06 00:41:29

另一种解决方法是将%~dp0保存在脚本开头的另一个变量中。

代码语言:javascript
复制
@echo off
setlocal
set filepath=%~dp0
.
.
some code
.
.
cd away from original path
.
.
COPY "%filepath%Hello World.BAT" "C:\Hello World.bak"

这应该行得通。

我忍不住想,它不起作用的原因与你的语录有关。

您拥有以下内容:

代码语言:javascript
复制
COPY %~dp0"Hello World.BAT" C:\"Hello World.bak"

将其替换为:

代码语言:javascript
复制
COPY "%~dp0Hello World.BAT" "C:\Hello World.bak"

您需要用引号将整个路径括起来,以确保它可以正常工作。如果您有:

代码语言:javascript
复制
C:\Program Files\Somefolder\

作为您的路径,并使用您拥有它们的引号,它将如下所示:

代码语言:javascript
复制
"C:\Program Files\Somefolder\""Hello World.bak"

它不会起作用的。

票数 5
EN

Stack Overflow用户

发布于 2012-04-05 21:47:56

在我的脑海中,我还没有确切地计算出更改当前目录是如何导致命令在更改之前工作时失败的。但我注意到引号的位置不是最好的。路径中的空格将导致命令失败,尽管在我看来,无论您当前的目录是什么,它都应该失败。

我将使用:

代码语言:javascript
复制
COPY "%~dp0Hello World.BAT" "C:\Hello World.bak"

将引号移到第一个参数的前面可能很重要。将它移动到第二个参数并不重要,因为路径中显然没有空格,但在我看来更好。

编辑

在仔细阅读了你的问题后,我想这个故事肯定还有更多的内容。如果两个批处理文件都在C驱动器的根目录中,那么您最初发布的代码应该可以工作。

尝试编辑您的脚本以诊断发生了什么。将ECHO放在copy命令之前,这样您就可以看到脚本试图执行的操作。(或者简单地确保echo处于打开状态,但这样可能很难在输出中找到正确的行。)

代码语言:javascript
复制
echo COPY %~dp0"Hello World.BAT" C:\"Hello World.bak"

如果你仍然找不到哪里出了问题,那就把结果张贴出来,这样别人就能帮上忙了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10029628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档