为什么xcopy命令无法将位图文件复制到Windows system32目录的子目录中?

时间:2017-02-04 20:05:48

标签: batch-file cmd

我的批处理文件有问题。我想使用xcopy复制一些文件,但它无效。

@echo off
md %systemroot%\system32\hello
md %systemroot%\system32\wlppr
xcopy /y "%cd%\qwerty.bmp" "%systemroot%\system32\hello"
xcopy /y "%cd%\qwerty2.bmp" "%systemroot%\system32\wlppr"

文件夹成功创建,但当Windows尝试复制文件时,此消息显示在CMD中:

File not found - qwerty.bmp
0 File(s) copied
File not found - qwerty2.bmp
0 File(s) copied

是的,我尝试以管理员权限运行该文件。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

通过双击批处理文件,执行Windows命令解释程序cmd.exe,使用隐式选项/C自动关闭控制台窗口,并在成功执行批处理后终止命令进程或因语法错误而退出。此行为不适合调试批处理文件无法按预期方式工作。更好地调试批处理文件是打开一个命令提示符窗口,导致运行cmd.exe并使用隐式选项/K来保持打开控制台窗口并让命令进程在执行批处理文件之后继续运行(不包含exit没有/B)以查看批处理文件执行期间输出的所有错误消息。

双击批处理文件通常会导致批处理文件目录中的批处理文件执行。因此,当前目录是批处理文件的目录。

但是,如果批处理文件存储在Windows资源管理器中使用UNC path打开的网络共享上,则Windows命令解释程序会输出通常一条消息,指出当前目录设置为{{1在从批处理文件执行第一个命令行之前。可以通过特殊的Windows注册表值关闭此行为。

如果通过右键单击并使用上下文菜单选项以管理员身份运行执行批处理文件,则以%SystemRoot%作为当前目录启动Windows命令进程,从而执行批处理文件,Windows系统目录为当前目录。

因此建议将此批处理文件编写为独立于当前目录。一个好主意是将两个位图文件复制到与批处理文件相同的目录中,并使用%SystemRoot%\System32引用批处理文件的目录,而不依赖于批处理文件执行时的当前目录。 %~dp0引用参数0的驱动器和路径,它是批处理文件的名称。在命令提示符窗口中运行%~dp0,以获取有关引用批处理文件参数的详细信息。

命令 XCOPY 会在复制一个或多个文件时自动创建整个文件夹树,如果目标字符串以反斜杠结尾,则call /?表明目标是文件夹名称并且不是文件名。

所以要使用的命令是:

xcopy

%SystemRoot%\System32\xcopy.exe "%~dp0qwerty.bmp" "%SystemRoot%\System32\hello\" /Q /Y >nul %SystemRoot%\System32\xcopy.exe "%~dp0qwerty2.bmp" "%SystemRoot%\System32\wlppr\" /Q /Y >nul 引用的批处理文件的文件夹路径始终以反斜杠结尾。因此,两个源文件名字符串中都没有指定其他反斜杠。

在命令提示符窗口%~dp0中运行以获取有关此命令的帮助。