繁体   English   中英

改变目录停止 %~dp0 工作

[英]changing directory stops %~dp0 from working

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

COPY %~dp0"Hello World.BAT" C:\"Hello World.bak"

在脚本的早期,我需要更改到C:\根目录之外的子目录,但这会阻止上面的复制命令工作,我得到的错误是“找不到文件”。 如果我留在C:\的根目录中,复制命令将完美运行。 任何想法为什么会这样。

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

@echo off
setlocal
set filepath=%~dp0
.
.
some code
.
.
cd away from original path
.
.
COPY "%filepath%Hello World.BAT" "C:\Hello World.bak"

应该有效。

我很想认为它不起作用的原因与您的报价有关。

你有这个:

COPY %~dp0"Hello World.BAT" C:\"Hello World.bak"

将其替换为:

COPY "%~dp0Hello World.BAT" "C:\Hello World.bak"

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

C:\Program Files\Somefolder\

作为您的路径并使用引号,结果将如下所示:

"C:\Program Files\Somefolder\""Hello World.bak"

它不会工作。

我还没有完全弄清楚更改当前目录是如何导致命令在更改之前工作时失败的。 但我注意到引号没有放在最佳位置。 路径中的空格会导致命令失败,但在我看来,无论您当前的目录如何,它都应该失败。

我会用:

COPY "%~dp0Hello World.BAT" "C:\Hello World.bak"

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

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

尝试编辑您的脚本来诊断正在发生的事情。 将 ECHO 放在复制命令之前,这样您就可以看到脚本试图做什么。 (或者简单地确保回声打开,但这样可能更难在 output 中找到正确的行。)

echo COPY %~dp0"Hello World.BAT" C:\"Hello World.bak"

如果您仍然无法找出问题所在,请发布结果以便其他人提供帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM