MC *_* ND 5 windows command-line xcopy batch-file windows-10
Microsoft文档指出xcopy退出代码是
Exit code Description
0 Files were copied without error.
1 No files were found to copy.
2 The user pressed CTRL+C to terminate xcopy.
4 Initialization error occurred.
There is not enough memory or disk space,
or you entered an invalid drive name
or invalid syntax on the command line.
5 Disk write error occurred.
Run Code Online (Sandbox Code Playgroud)
我运行Windows 10 64bit系统(西班牙语言环境中),我尝试了所有我能想到的得到一个errorlevel 1从xcopy,但我已经无法。和一切我的意思是我没有测试的唯一的事情就是/N用在短名称不启用(在我的环境我无法测试它)来源长文件名。通常怀疑不匹配的通配符、不存在的文件名、空文件夹、/D、/EXCLUDE、/A、/M、/U、 ... 已经过测试。
我虽然它应该很容易(不是找到文件?,容易),但我错了,事实并非如此,所以我进行了调试xcopy.exe,这就是我所看到的:
xcopy内部使用一个方法调用DisplayMessageAndExit(messageID, WSTRING, exitCode),好吧,显示一条消息并退出。exit在某些情况下,它还使用多次调用来离开程序(例如Ctrl-C)
我没有找到任何exit可以使用值的调用1
从对 进行的调用列表中DisplayMessageAndExit,它们都没有传递/接收1作为退出代码的值。
从对DisplayMessageAndExit其中一个调用的列表中,只有一个使用 MessageID 0x5622(在我的安装中,关联的资源在 中C:\Windows\System32\es-ES\ulib.dll.mui,它依赖于语言环境),即No se encuentra el archivo: %1( File not found - %1),调用中使用的退出代码是4
也许有一种方法xcopy可以生成1退出代码,但我不知道如何。
所以问题是:有没有办法从中获取errorlevel 1退出代码xcopy?我错过了什么?
我唯一能想到的是某种竞争条件,即 xcopy 收集它将复制的文件列表和实际进行复制之间,某些其他进程会删除或移动文件。
如果仅缺少某些源文件,您会收到错误 1,那么它可能是故意这样做的。我能想到的有意做到这一点的唯一方法是运行 2 个或更多单独的进程,一个 xcopy 和一个删除或移动命令,所有进程都对相同的源文件进行操作。您将需要一个包含大量文件的源,以使竞争进程有时间相互超越。
省略 /C 开关可能意味着,如果它是 xcopy 尝试的第一个文件并失败,它将立即放弃而不复制任何文件,从而满足“不复制任何文件”的条件。