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. Это также кроссплатформенный. Подумайте о переключении.