#powershell
#powershell
Вопрос:
Я выполняю некоторые обновления имени пакетного файла, и у меня возникают проблемы с включением папок. В настоящее время он настроен только на определенные типы файлов, но я также хочу включить папки. Поскольку папки не имеют расширения, я не уверен, как указать папки в строке «-include». Будем признательны за любую помощь.
Вот с чем я сейчас работаю, но он игнорирует папки, когда я хотел бы их включить.
Get-ChildItem k:/toolbox/powershell -Include *.gif, *.jpg, *.png, *.xls,
*.xlsx, *.ppt, *.pptx, *.doc, *.docx, *.pdf -recurse | where {$_.name -match
"_"} | foreach {
$New=$_.name.Replace("_","-")
Rename-Item -path $_.Fullname -newname $New -passthru
}
Комментарии:
1.
-Include
параметр — по какой-либо причине — не действует на имена каталогов … это действует только на.Name
часть имени файла. [ вздох … ] мне сказали, что это работает на ps7, но я это не тестировал. ///// это означает, что вам нужно будет выполнить любую фильтрацию имен каталогов после того, как вы получите свои элементы изG-CI
вызова.2.
Get-ChildItem
есть параметр switch-Directory
, по крайней мере, с версии 4.0, который будет возвращать только каталоги. Возможно, вам потребуется сделать это в виде двух инструкций — одной в качестве вашей текущей версии и одной, где вместо-Include
вы используете-Directory
.3. Чтобы включить каталоги, вы должны сказать . Хотите верьте, хотите нет. *. не будет соответствовать.
Ответ №1:
(Get-Item '~Desktop*') | foreach { $FolderName = $_.name.Replace("_","-"); Rename-Item -path $_.fullname -newname $FolderName -passthru }
Ответ №2:
Я бы просто добавил 2-й оператор:
Get-ChildItem "k:/toolbox/powershell" -Recurse |where mode -eq d----- | where {$_.name -match "_"} | foreach {$New=$_.name.Replace("_","-")
Rename-Item -path $_.Fullname -newname $New -passthru }
Если вы запустите Get-ChildItem "k:/toolbox/powershell"
, вы получите список элементов, для которых «Режим» равен «d——» для каталогов, следовательно, вы можете использовать эти критерии фильтрации для каталогов