我在C:\驱动器上有两个批处理文件,正在使用%~dp0命令使用第一个脚本的路径来制作第二个批处理脚本的副本:
COPY %~dp0"Hello World.BAT" C:\"Hello World.bak"在脚本的早期,我被要求切换到C:\根目录下的一个子目录,但这会使上面的复制命令停止工作,我得到的错误是“无法找到文件”。如果我停留在C:\的根目录中,复制命令就能完美地工作。你知道为什么会发生这种情况吗?
发布于 2012-04-06 00:41:29
另一种解决方法是将%~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"它不会起作用的。
发布于 2012-04-05 21:47:56
在我的脑海中,我还没有确切地计算出更改当前目录是如何导致命令在更改之前工作时失败的。但我注意到引号的位置不是最好的。路径中的空格将导致命令失败,尽管在我看来,无论您当前的目录是什么,它都应该失败。
我将使用:
COPY "%~dp0Hello World.BAT" "C:\Hello World.bak"将引号移到第一个参数的前面可能很重要。将它移动到第二个参数并不重要,因为路径中显然没有空格,但在我看来更好。
编辑
在仔细阅读了你的问题后,我想这个故事肯定还有更多的内容。如果两个批处理文件都在C驱动器的根目录中,那么您最初发布的代码应该可以工作。
尝试编辑您的脚本以诊断发生了什么。将ECHO放在copy命令之前,这样您就可以看到脚本试图执行的操作。(或者简单地确保echo处于打开状态,但这样可能很难在输出中找到正确的行。)
echo COPY %~dp0"Hello World.BAT" C:\"Hello World.bak"如果你仍然找不到哪里出了问题,那就把结果张贴出来,这样别人就能帮上忙了。
https://stackoverflow.com/questions/10029628
复制相似问题