Вопрос или проблема
Я использую Robocopy в Windows PowerShell. Когда Robocopy сталкивается с ошибкой, он иногда открывается в новом окне cmd.exe
, а иногда остается в том же окне PowerShell. Почему?
Пример ниже с командой:
robocopy /e "M:\BackedUpInEHD-E" Z:/BackedUpInEHD-E
И ошибка:
Windows PowerShell
Copyright (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.
Ответ или решение
Когда вы выполняете команду Robocopy в Windows PowerShell и возникает ошибка, вы можете наблюдать два разных поведения: Robocopy может либо оставаться в текущем окне PowerShell, либо открывать новое окно cmd.exe. Это явление зависит от нескольких факторов, которые мы рассмотрим ниже.
-
Способ вызова Robocopy: Если вы запускаете Robocopy напрямую из интерфейса PowerShell, он обычно будет выполняться в том же окне. Однако, если вы вызываете Robocopy через исполняемый файл в командной строке или скрипте, выполняемом внутри PowerShell, он может открыть новое окно cmd.exe.
-
Системные настройки и окружение: В некоторых случаях, конфигурация вашей системы может влиять на поведение командной строки. Например, если Robocopy вызывается с использованием оболочки Windows, которая настроена на открытие новых окон для выполнения команд, это может привести к тому, что Robocopy запустится в новом окне cmd.exe.
-
Условия выполнения: Если вы вызовете Robocopy с параметрами, которые влечет за собой изменение контекста (например, если вы используете параметр, который требует операционной системы переключиться в другую среду для выполнения команды), это может вызвать открытие нового окна.
-
Ошибки и обработка: Если возникает ошибка, которая приводит к прерыванию выполнения работы в текущей среде, Windows может решить открыть новое окно cmd.exe для выполнения Robocopy, если ваш вызов был сделан с параметрами, которые подразумевают выполнение в среде командного процессора.
Рекомендации:
- Запустите PowerShell от имени администратора: Это может помочь избежать проблем с правами доступа, которые могут приводить к ошибкам.
- Проверьте корректность путей: Ошибка "The system cannot find the path specified" указывает на то, что путь источника (M:\BackedUpInEHD-E) не найден. Убедитесь, что вы правильно указали путь и что диск M: доступен.
- Используйте параметр /LOG: Вы можете использовать параметр
/LOG:file.txt
, чтобы записать вывод Robocopy в файл. Это поможет вам проследить за поведением команды и проверять ошибки, не полагаясь на окно выполнения.
Таким образом, открытие нового окна cmd.exe или оставление в текущем окне PowerShell связано с тем, как вы вызываете Robocopy, текущими настройками вашей системы и условиями выполнения команды. Подобные различия в поведении могут быть устранены путем тщательной настройки среды выполнения и проверкой путей и параметров команд.