我在C:\
驱动器上有两个批处理文件,并且正在使用%~dp0
命令使用第一个脚本的路径来复制第二个批处理脚本:
COPY %~dp0"Hello World.BAT" C:\"Hello World.bak"
在脚本的早期,我需要更改到根目录之外的子目录,C:\
但这会阻止上述复制命令工作,我得到的错误是“找不到文件”。如果我留在复制命令的根目录中,C:\
则可以完美运行。任何想法为什么会发生这种情况。
我在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 放在复制命令之前,以便您可以看到脚本正在尝试执行的操作。(或者只是确保 echo 处于打开状态,但是可能更难在输出中找到正确的行。)
echo COPY %~dp0"Hello World.BAT" C:\"Hello World.bak"
如果您仍然无法找出问题所在,请发布结果以便其他人提供帮助。