【发布时间】:2014-01-23 03:19:16
【问题描述】:
请注意,我错误地假设我应该使用%~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。如果我在单独的行上评估%~dp0%,它确实有效,正如FILECOPIEDC.txt 所证明的那样。似乎它以某种方式弄乱了文件副本,但它在回显行的中间按预期工作。
确实这是怎么回事?
【问题讨论】:
-
将三个调用
copy改为echo,然后运行批处理文件。仔细查看输出,尤其是第二个echo。您是否看到两个单独的语句(例如第一个和第三个)?
标签: windows batch-file cmd