![](/img/trans.png)
[英]batch file - use dir /s /b %~dp0 to get list of files and remove %~dp0's path from output
[英]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.