robocopy обрабатывает параметры как файлы

Когда я использую robocopy для копирования файла и использую параметр /IS для перезаписи, если он уже присутствует в месте назначения. Он рассматривает параметр как другой файл, как видно из журналов: ERROR : Invalid Parameter #4 : "C:/Program Files/Git/IS"

Кто-нибудь знает, как копировать файлы в окнах, перезаписывая файл в месте назначения.

$ robocopy "Z:\ubuntushare" "C:\Natlink\Natlink\MacroSystem" "_git.py" /IS

   ROBOCOPY     ::     Robust File Copy for Windows

  Started : Sat Sep 17 18:00:05 2016

   Source - Z:\ubuntushare\
     Dest - C:\Natlink\Natlink\MacroSystem\

    Files : _git.py

  Options : /COPY:DAT /R:1000000 /W:30

------------------------------------------------------------------------------

ERROR : Invalid Parameter #4 : "C:/Program Files/Git/IS"

       Simple Usage :: ROBOCOPY source destination /MIR

             source :: Source Directory (drive:\path or \\server\share\path).
        destination :: Destination Dir  (drive:\path or \\server\share\path).
               /MIR :: Mirror a complete directory tree.

    For more usage information run ROBOCOPY /?


****  /MIR can DELETE files as well as copy them !

pri@pri-PC MINGW64 /c/NatLink/NatLink/MacroSystem

person Priyesh    schedule 18.09.2016    source источник


Ответы (2)


отредактировано 19 сентября 2016 г. — проверено и работает

Из преобразования пути MinGW Posix

Аргумент, начинающийся с 2 или более /, считается экранированным переключателем в стиле Windows и будет передан с удаленным ведущим / и все \ заменены на /.

  • За исключением того, что если за начальным блоком / следует /, аргумент считается путем UNC, а начальный / не удаляется.

примечание: это всего лишь небольшая выдержка из полного списка. полный список лучше читать при работе с оболочкой git bash в windows

Итак, в этом случае решение состоит в том, чтобы удвоить косую черту в переключателе

robocopy "Z:\ubuntushare" "C:\Natlink\Natlink\MacroSystem" "_git.py" //IS
person MC ND    schedule 18.09.2016
comment
Ух ты. Некоторые из этих правил странны. - person Harry Johnston; 19.09.2016
comment
@HarryJohnston, я должен согласиться, но я также рад, что кто-то задумался о сосуществовании двух систем. - person MC ND; 19.09.2016

ROBOCOPY использует косую черту / в стиле Windows для указания параметров командной строки. Это не очень хорошо работает с Git-bash или подобными терминалами, поскольку косая черта интерпретируется как путь root в Linux и подобных средах.

Оболочка интерпретирует /something как файл something в корневой папке C:\Program Files\Git\, а не параметр командной строки. Таким образом, это означает "C:\Program Files\Git\something", которого не существует.

Даже попытка использовать вариант справки /? завершается с аналогичной ошибкой.

Используйте стандарт -opt для linux/unix/mac вместо /opt. Robocopy позволяет использовать тире/дефис - для указания параметров. например robocopy -? работает и показывает информацию об использовании/помощь. Ну действуй:

robocopy "Z:\ubuntushare" "C:\Natlink\Natlink\MacroSystem" "_git.py" -IS
person aneroid    schedule 18.09.2016
comment
Это зависит от того факта, что robocopy принимает - вместо /. Наверняка есть более общий способ сказать оболочке не связываться с командной строкой? - person Harry Johnston; 18.09.2016
comment
@HarryJohnston +1 не знал, что Robocopy явно разрешает это и, следовательно, работает. Отредактирую мой ответ. Итак, я предполагаю, что все команды Windows, использующие /opts, приведут к этой ошибке? Было удивительно, что экранирование / с помощью \/ тоже не сработало. - person aneroid; 18.09.2016