繁体   English   中英

无法从具有%〜dp0%的路径复制文件

[英]Copying files from a path with %~dp0% does not work

请注意,我以为应该使用 %~dp0%从内部获取不包含批处理文件的文件名的路径是错误的 我将问题保持原样,因为我看到其他人也有同样的错误前提。 有关更多信息,请参见接受的答案及其评论。


许多高级Windows用户都知道,批处理文件中的表达式%~dp0%将被评估到该批处理文件的目录中, 包括尾部的反斜杠。

如果我在D:\\中有一个包含echo %~dp0%的批处理文件,则该行将按预期方式运行并输出D:\\

问题

如果我创建一个文件D:\\FILETOCOPY.txt和一个批处理文件D:\\problem.bat ,其内容如下:

@ECHO OFF

copy D:\FILETOCOPY.txt %userprofile%\FILECOPIEDA.txt

copy %~dp0%FILETOCOPY.txt %userprofile%\FILECOPIEDB.txt

set Evaluated=%~dp0%FILETOCOPY.txt
copy %Evaluated% %userprofile%\FILECOPIEDC.txt

cmd.exe

我在运行它时(通过双击)得到以下输出:

        1 file(s) copied.
The system cannot find the path specified.
        1 file(s) copied.
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

D:\>

并且文件%userprofile%\\FILECOPIEDB.txt从目标位置丢失。 FILECOPIEDC.txt所证明的,如果我在单独的行上评估%~dp0% ,它确实可以工作。 似乎它以某种方式弄乱了文件副本,但是它在回显行的中间按预期工作。

究竟是怎么回事呢?

尝试%~dp0而不是%~dp0%

您的命令转换为(为清楚起见插入了括号和下划线)

copy [%~dp0]_[%FILETOCOPY.txt %] userprofile_[%\FILECOPIEDB.txt]

并且由于变量%FILETOCOPY.txt %不存在,它将被一个空字符串替换。

在Windows中,连续两个\\\\被视为单个\\ 这不是一个问题。

如果您的%userprofile%包含空格或&则将整个术语用双引号引起来。

提到了另一点-术语应为%~dp0

暂无
暂无

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

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