В .bat
файлы для cmd.exe Windows, рекурсивное владение содержимым папки переходит
takeown /f foldername /r /d Y >nul: 2>&1
Проблема в том, что это работает, только если в текущем языковом стандарте используется слово да начинается с буквы Y
. Например. он не работает на французском языке, который использует Oui, поэтому требует O
.
Любой обходной путь?
Вы можете использовать COPY
команда для определения ответа «да», используемого машиной.
@echo off
setlocal
for /f "delims=(/ tokens=2" %%Y in (
'"copy /-y nul "%~f0" <nul"'
) do if not defined yes set "yes=%%Y"
takeown /f foldername /r /d %yes% >nul 2>&1
В %yes%
значением будет все слово, а не только первая буква. Я думаю, это сработает. Но если я ошибаюсь, вы можете просто использовать %yes:~0,1%
вместо.
Обновить Как указывает в своем комментарии fgrieu, приведенное выше не удастся, если путь к сценарию включает (
. Сбой из-за других специальных символов можно исправить, отказавшись от внешних двойных кавычек и избегая перенаправления. Но (
проблематично.
Вот альтернативная стратегия, которая работает, пока %temp%
указывает на допустимую папку, в которой у пользователя есть права записи. Он создает файл с известным именем, не вызывающим проблем. Если файл уже существует в %temp%
тогда его никто не беспокоит.
@echo off
setlocal
pushd "%temp%"
if not exist getYes.tmp (call ) >>getYes.tmp
set "yes="
for /f "delims=(/ tokens=2" %%Y in (
'"copy /-y nul getYes.dummy <nul"'
) do if not defined yes set "yes=%%Y"
takeown /f foldername /r /d %yes% >nul 2>&1
Я полагаю, нет никакой гарантии, что COPY и TAKEOWN используют один и тот же ответ «да», но я был бы шокирован, если бы они этого не сделали.