CMD не поддерживает UNC-пути в качестве текущих каталогов

У нас есть пакетные сценарии, которые, кажется, работают нормально, но я редактирую один из них, чтобы включить новую работу, и при запуске сценария вручную (двойным щелчком мыши из проводника Windows) я получаю вышеуказанное сообщение об ошибке каждый раз, когда в сценарии выполняется команда pushd встречается. Это команды pushd, которые были там с точки года, и сценарии работают нормально. Есть ли разница между пакетным скриптом, запускаемым вручную, и при запуске планировщиком? Как я могу отключить сообщение об ошибке при запуске вручную (если это возможно)?

2 ответа

Решение

При двойном щелчке командного файла cmd.exe запускается с неявным использованием опции /C закрыть командный процесс после завершения выполнения командного файла и с установкой каталога командного файла в качестве текущего каталога.

Если пакетный файл с двойным щелчком мыши находится в общем сетевом ресурсе, и вместо сопоставления сетевого ресурса с буквой диска и использования сетевого диска используется UNC-путь, cmd.exe информирует пользователя о том, что UNC-путь как текущий каталог не поддерживается, и устанавливает %SystemRoot% (Каталог Windows) в качестве текущего каталога.

Предупреждение может быть проигнорировано, если пакетный файл предназначен для выполнения из какого-либо каталога, что означает, что для него не требуется, чтобы каталог пакетного файла был текущим каталогом. Хорошие кодированные командные файлы, особенно те, которые выполняются планировщиком задач Windows, могут выполняться с любым каталогом, являющимся текущим каталогом.

При запуске пакетного файла как запланированной задачи планировщик заданий устанавливает %SystemRoot%\System32 (Системный каталог Windows) в качестве текущего каталога перед выполнением команды, за исключением того, что в свойствах запланированной задачи явно указан определенный путь к каталогу в качестве запуска в каталоге.

См. Также Как отключить проверку UNC для командных сессий?

Обратите внимание, что при включении поддержки запуска пакетных файлов с UNC-путем в качестве текущего каталога некоторые консольные приложения могут не работать из-за того, что они не предназначены для этой среды.

В вашем случае с пакетным файлом, предназначенным для выполнения в качестве запланированной задачи и, следовательно, с учетом всех аспектов, перечисленных мною в ответе " Выполнение файлов BAT в запланированной задаче", вы можете игнорировать это предупреждение при двойном щелчке пакетного файла с использованием пути UNC.

Конечно, вы также можете создать ярлык файла (*.lnk) для командного файла для запуска командного файла с помощью этого ярлыка, если в свойствах ярлыка для файла установлено значение Пуск в. %SystemRoot%\System32 как планировщик задач Windows делает по умолчанию.

У меня есть несколько советов - подумайте о переписывании скрипта в PowerShell. PowerShell позволяет текущему рабочему каталогу находиться в сети. PowerShell в целом более универсален и мощен, чем CMD. Это также кроссплатформенный. Подумайте о переключении.

Другие вопросы по тегам