Проверка этого на Windows 7 x64 Я обнаружил ошибку, при которой xcopy копирует file.txt в оба"C: \ Program Files \ MyFolder \" (папка уже существует) и "C: \ Program Files (x86) \ MyFolder \ "(папка не существует и создается с помощью xcopy):
xcopy "file.txt" "%PROGRAMFILES%\MyFolder\" /i /r /v /k /f /c /h /y
После этого я получаю файл, скопированный в обе эти директории :
C:\Program Files\MyFolder\file.txt
C:\Program Files (x86)\MyFolder\file.txt
При использовании robocopy он ведет себя правильно:
robocopy "file.txt" "%PROGRAMFILES%\MyFolder\" /E /XJ /w:0 /r:0
После этого я получаю файл, скопированный только там, где он должен быть:
C:\Program Files\MyFolder\file.txt
Означает ли это, что на xcopy нельзя положиться, и лучше придерживаться robocopy?
Возможно, это как-то связано с этим, но в начале моего командного файла я запускаю команду чтобы определить, является ли ОС 32-битной или 64-битной, с помощью двух команд «goto», чтобы указать ее правильный раздел в зависимости от x86 / x64. Это пример полного пакетного файла:
reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x86" > NUL && set OS=32BIT || set OS=64BIT
if %OS%==32BIT goto 32bit
if %OS%==64BIT goto 64bit
:32bit
start /wait mysetupx86.exe /S
xcopy "file.txt" "%PROGRAMFILES%\MyFolder\" /i /r /v /k /f /c /h /y
goto finished
:64bit
start /wait mysetupx64.exe /S
xcopy "file.txt" "%PROGRAMFILES%\MyFolder\" /i /r /v /k /f /c /h /y
goto finished
:finished
exit
Независимо от того, используете ли вы xcopy или robocopy, он должен скопировать файл file.txt в Program Files \ MyFolder, поскольку мои установщики оба устанавливаются в эту папку в любом случае на x86 или x64. Я просто хочу знать, почему xcopy плохо себя ведет? Приветствия люди.