Я пытаюсь собрать сценарий Powershell, который будет:
- Поиск рекурсивно из корневого каталога
Исключить файлы с существующим префиксом имени файла "yyyyMMdd"
-Переименуйте файлы, не исключенные выше, с префиксом имени файла "" yyyyMMdd "на основе их конкретного LastWriteTime
Примечание: в идеале этот скрипт должен включать все расширения типов файлов
Я попробовал себя, но это, казалось бы, было у меня над головой, так как мои попытки не увенчались успехом.
Заранее спасибо.
http://ss64.com/ps/syntax-stampme.html
#StampMe.ps1
param( [string] $fileName)
# Check the file exists
if (-not(Test-Path $fileName)) {break}
# Display the original name
"Original filename: $fileName"
$fileObj = get-item $fileName
# Get the date
$DateStamp = get-date -uformat "%Y-%m-%d@%H-%M-%S"
$extOnly = $fileObj.extension
if ($extOnly.length -eq 0) {
$nameOnly = $fileObj.Name
rename-item "$fileObj" "$nameOnly-$DateStamp"
}
else {
$nameOnly = $fileObj.Name.Replace( $fileObj.Extension,'')
rename-item "$fileName" "$nameOnly-$DateStamp$extOnly"
}
# Display the new name
"New filename: $nameOnly-$DateStamp$extOnly"
Я надеюсь изменить строку:
$DateStamp = get-date -uformat "%Y-%m-%d@%H-%M-%S"
Быть LastWriteTime вместо get-date, но я понятия не имею, как это сделать.
Этот код (из другого вопроса суперпользователя):
Get-ChildItem "Test.pdf" | Rename-Item -newname {$_.LastWriteTime.toString("yyyyMMdd") + " Test.pdf"}
... успешно переименовывает один файл, но я не могу интегрировать это в больший скрипт.
Что касается рекурсивного выполнения вышеизложенного, я попробовал это (также с http://ss64.com/ps/syntax-stampme.html):
foreach ($file in get-ChildItem *.* -recurse) { ./StampMe.ps1 $file.name }
Который успешно применяет сценарий PS к файлам в корневом каталоге, но не может применяться к любым файлам в дереве подпапок, которые распространяются из корневого каталога.