Изменить все файлы RO, начиная с точки, на RW - PullRequest
0 голосов
/ 04 ноября 2011

Мне нужно найти в структуре каталогов все файлы, начинающиеся с точки (не спрашивать ...), и изменить их с «только для чтения» на «rw». Я могу идентифицировать эти файлы по первой команде, но как я могу перевести это во вторую команду?

dir .*.* /s /a-D /ar

Теперь я хочу взять этот вывод и запустить attrib + r. Это то, что я получил, но это не работает.

for /f %f in ('dir .*.* /s /a-D /ar') DO "ATTRIB +R" "%G"

Я думаю, что я близок, но пакетные команды DOS никогда не работали так, как я ожидал (моя проблема, а не DOS)

1 Ответ

2 голосов
/ 04 ноября 2011

Причина, по которой он не работает, заключается в том, что attrib +r делает обработанные токены снова доступными только для чтения, а также потому, что вы используете заглавные% G, где вы должны использовать маленькие буквы.

В Windows файлы только для чтения отличаютсяиз Linux таким образом, что вы либо помечаете файл как доступный только для чтения, либо нет.Если он не только для чтения, он будет использовать свойства, найденные в ACL для папки / файла.Обычно он генерирует файл RW вместо Read-Only.

Подробнее об этом можно прочитать здесь:

http://msdn.microsoft.com/en-us/magazine/cc982153.aspx

Итак, на ваш вопрос:

for /f %f in ('dir .*.* /s /a-D /ar') DO "ATTRIB -R" "%g"

(Поскольку у меня нет файлов или папок с префиксом. Я не могу проверить и посмотреть, работает ли вышеприведенное, возможно, вы захотите использовать% f вместо% g, в зависимости от того, какой токен вы хотите использовать.)

Приведенное выше будет делать attrib -r, который удаляет атрибут только для чтения.

Возможно, вы захотите использовать двойной %% для пакетных сценариев, которые должны выполняться как .bat, .cmdи т. д.

Как указано в справочном экране for /?:

"Чтобы использовать команду FOR в пакетной программе, укажите %% variable вместо% variable."

Более подробно:

"Имена переменных чувствительны к регистру, поэтому% i отличается от% I."

...