Вопрос или проблема
Я использую 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:
-
Настройка запуска: Если Robocopy запускается из ярлыка или скрипта, который настроен на открытие нового окна командной строки, эта настройка возобладает. В таких случаях можно настроить параметры скрипта или ярлыка так, чтобы он не запускал cmd.exe в новом окне.
-
Обработка ошибок: Если Robocopy завершает свою работу с ошибкой, PowerShell может попытаться запустить ошибочную команду в cmd.exe для обработки, что иногда может привести к открытию нового окна. Это может происходить, если Robocopy вызывается из PowerShell с специфическими параметрами или если команда обрабатывается как сценарий, сталкивающийся с ошибками.
-
Конфигурация сессии: В зависимости от того, как настроена сессия PowerShell или пользователем установленные параметры, любые ошибки в командной строке могут иногда приводить к тому, что PowerShell автоматически вызывает отдельное окно cmd.exe. Это поведение не всегда предсказуемо.
Как это исправить:
-
Запуск из PowerShell: Убедитесь, что вы подключаетесь к PowerShell напрямую и запускаете команды из командной строки самой PowerShell без промежуточных сценариев или ярлыков.
-
Изменение параметров выполнения: Если вы хотите, чтобы Robocopy всегда запускался в текущем окне PowerShell, можно попробовать использовать параметр
Start-Process
с аргументом-NoNewWindow
. Например:Start-Process robocopy -ArgumentList '/e "M:\BackedUpInEHD-E" Z:/BackedUpInEHD-E' -NoNewWindow
-
Проверка конфигурации: Если проблема сохраняется, проверьте настройки вашей среды PowerShell и убедитесь, что они соответствуют стандартным. Возможно, вам также следует проверить, не указывает ли родительская программа на использование отдельного окна.
-
Логи ошибок: Для более тщательного анализа работы Robocopy рассмотрите возможность перенаправления вывода ошибок в файл. Это поможет анализировать ошибки, не вызывая появления нового окна:
robocopy /e "M:\BackedUpInEHD-E" Z:/BackedUpInEHD-E 2> errorlog.txt
Если вы будете следовать этим шагам, это должно помочь вам лучше контролировать поведение Robocopy в PowerShell и устранить непредсказуемое открытие нового окна cmd.exe.