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

Batch file 为什么xcopy命令无法将位图文件复制到Windows system32目录的子目录中?,batch-file,cmd,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尝试复制文件时,此消息

我的批处理文件有问题。我想使用
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
是的,我尝试以管理员权限运行该文件


我做错了什么?

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

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

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

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

因此,建议编写此批处理文件以独立于当前目录工作。最好将要复制的两个位图文件放在与批处理文件相同的目录中,并使用
%~dp0
引用批处理文件的目录,而不依赖于批处理文件执行时的当前目录
%~dp0
引用参数0(批处理文件的名称)的驱动器和路径。在命令提示窗口中运行
call/?
,了解有关引用批处理文件参数的详细信息

如果目标字符串以反斜杠结尾,使
XCOPY
明确目标是文件夹名而不是文件名,则命令XCOPY会在复制1个或多个文件时自动创建整个文件夹树

因此,要使用的命令是:

%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
引用的批处理文件的文件夹路径始终以反斜杠结尾。因此,在两个源文件名字符串中都没有指定额外的反斜杠


在命令提示符窗口中运行此命令的帮助信息。

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

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

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

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

因此,建议编写此批处理文件以独立于当前目录工作。最好将要复制的两个位图文件放在与批处理文件相同的目录中,并使用
%~dp0
引用批处理文件的目录,而不依赖于批处理文件执行时的当前目录
%~dp0
引用参数0(批处理文件的名称)的驱动器和路径。在命令提示窗口中运行
call/?
,了解有关引用批处理文件参数的详细信息

如果目标字符串以反斜杠结尾,使
XCOPY
明确目标是文件夹名而不是文件名,则命令XCOPY会在复制1个或多个文件时自动创建整个文件夹树

因此,要使用的命令是:

%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
引用的批处理文件的文件夹路径始终以反斜杠结尾。因此,在两个源文件名字符串中都没有指定额外的反斜杠

在命令提示窗口中运行
xcopy/?
以获取有关此命令的帮助。

是否可以启用