xcopy создает папку в «Program Files (x86)» на 64-битной Windows, а robocopy - нет? - PullRequest
0 голосов
/ 21 января 2020

Проверка этого на 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 плохо себя ведет? Приветствия люди.

...