Когда Robocopy выдает ошибку, он иногда открывается в новом окне cmd.exe, а иногда остается в том же окне PowerShell. Почему?

Вопрос или проблема

Я использую Robocopy в PowerShell Windows. Когда у Robocopy возникает ошибка, он иногда открывается в новом окне cmd.exe, а иногда остается в том же окне PowerShell. Почему?


Пример ниже с командой:

robocopy /e "M:\BackedUpInEHD-E" Z:/BackedUpInEHD-E

И ошибка:

Windows PowerShell
Авторские права (C) Microsoft Corporation. Все права защищены.

Попробуйте новую кросс-платформенную PowerShell https://aka.ms/pscore6

PS C:\Windows\System32\WindowsPowerShell\v1.0> robocopy /e "M:\BackedUpInEHD-E" Z:/BackedUpInEHD-E

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Надежное копирование файлов для Windows
-------------------------------------------------------------------------------

  Начато : Среда, 25 сентября 2024 г., 15:15:56
2024/09/25 15:15:56 ОШИБКА 3 (0x00000003) Получение типа файловой системы источника M:\BackedUpInEHD-E\
Система не может найти указанный путь.

   Источник = M:\BackedUpInEHD-E\
     Назначение = Z:\BackedUpInEHD-E\

    Файлы : *.*

  Параметры : *.* /S /E /DCOPY:DA /COPY:DAT /R:1000000 /W:30

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

2024/09/25 15:15:56 ОШИБКА 3 (0x00000003) Доступ к исходному каталогу M:\BackedUpInEHD-E\
Система не может найти указанный путь.
PS C:\Windows\System32\WindowsPowerShell\v1.0>

Иногда Robocopy открывается в новом окне cmd.exe:
вставьте описание изображения здесь
Поскольку новое окно cmd.exe открывается и закрывается быстро, вот скриншот:
вставьте описание изображения здесь
Пример, где Robocopy остается в том же окне PowerShell:
вставьте описание изображения здесь

Я использую Windows 10 Pro 21H2.

Ответ или решение

Вопрос, который вы подняли, связан с тем, как PowerShell и Command Prompt (cmd.exe) обрабатывают команды и их вывод. Robocopy — это утилита, которая традиционно работает в среде командной строки, и поведение ее открытия может зависеть от нескольких факторов.

Причины, по которым Robocopy может открываться в новом окне cmd.exe:

  1. Настройка запуска: Если Robocopy запускается из ярлыка или скрипта, который настроен на открытие нового окна командной строки, эта настройка возобладает. В таких случаях можно настроить параметры скрипта или ярлыка так, чтобы он не запускал cmd.exe в новом окне.

  2. Обработка ошибок: Если Robocopy завершает свою работу с ошибкой, PowerShell может попытаться запустить ошибочную команду в cmd.exe для обработки, что иногда может привести к открытию нового окна. Это может происходить, если Robocopy вызывается из PowerShell с специфическими параметрами или если команда обрабатывается как сценарий, сталкивающийся с ошибками.

  3. Конфигурация сессии: В зависимости от того, как настроена сессия PowerShell или пользователем установленные параметры, любые ошибки в командной строке могут иногда приводить к тому, что PowerShell автоматически вызывает отдельное окно cmd.exe. Это поведение не всегда предсказуемо.

Как это исправить:

  1. Запуск из PowerShell: Убедитесь, что вы подключаетесь к PowerShell напрямую и запускаете команды из командной строки самой PowerShell без промежуточных сценариев или ярлыков.

  2. Изменение параметров выполнения: Если вы хотите, чтобы Robocopy всегда запускался в текущем окне PowerShell, можно попробовать использовать параметр Start-Process с аргументом -NoNewWindow. Например:

    Start-Process robocopy -ArgumentList '/e "M:\BackedUpInEHD-E" Z:/BackedUpInEHD-E' -NoNewWindow
  3. Проверка конфигурации: Если проблема сохраняется, проверьте настройки вашей среды PowerShell и убедитесь, что они соответствуют стандартным. Возможно, вам также следует проверить, не указывает ли родительская программа на использование отдельного окна.

  4. Логи ошибок: Для более тщательного анализа работы Robocopy рассмотрите возможность перенаправления вывода ошибок в файл. Это поможет анализировать ошибки, не вызывая появления нового окна:

    robocopy /e "M:\BackedUpInEHD-E" Z:/BackedUpInEHD-E 2> errorlog.txt

Если вы будете следовать этим шагам, это должно помочь вам лучше контролировать поведение Robocopy в PowerShell и устранить непредсказуемое открытие нового окна cmd.exe.

Оцените материал
Добавить комментарий

Капча загружается...