bon*_*zai 1 windows cmd batch-file
请注意,我错误地认为我应该使用 %~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
Run Code Online (Sandbox Code Playgroud)
当我在它上面运行它(通过双击)时,我得到了这个输出:
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:\>
Run Code Online (Sandbox Code Playgroud)
并且%userprofile%\FILECOPIEDB.txt目标中缺少该文件.FILECOPIEDC.txt如果我%~dp0%在另一条线上进行评估,它确实有效.似乎它以某种方式混淆了文件副本,但它在回显线的中间按预期工作.
究竟是怎么回事?
%~dp0不要试试%~dp0%.
您的命令转换为(为清晰起见而插入的括号和下划线)
copy [%~dp0]_[%FILETOCOPY.txt %] userprofile_[%\FILECOPIEDB.txt]
Run Code Online (Sandbox Code Playgroud)
由于变量%FILETOCOPY.txt %不存在,它将被一个空字符串替换.
| 归档时间: |
|
| 查看次数: |
6075 次 |
| 最近记录: |