Portanto, este script deve fazer o truque. É relativamente simples.
$files = Get-ChildItem $basePath -File -Filter *.png -Recurse
foreach($file in $files){
$pathParts = $file.fullName.split('\')
$dateMod = $file.LastWriteTime.ToString("MM-dd-yyyy")
$first = $pathParts[-3]
$second = $pathParts[-2]
$file | Rename-Item -NewName "$first - $second - $dateMod.txt"
}
Aqui está a parte detalhada por parte:
$files = Get-ChildItem $basePath -File -Filter *.png -Recurse
Primeiro, ele obtém todos os arquivos a partir do caminho base (Você terá que definir a variável $basepath
para o seu caminho) recursivamente até o final da estrutura.
foreach($file in $files){
$pathParts = $file.fullName.split('\')
$dateMod = $file.LastWriteTime.ToString("MM-dd-yyyy")
$first = $pathParts[-3]
$second = $pathParts[-2]
$file | Rename-Item -NewName "$first - $second - $dateMod.txt"
}
Em seguida, para cada arquivo:
-
Divide o nome completo do arquivo (caminho e nome do arquivo) com base no caractere '\'.
$pathParts = $file.fullName.split('\')
-
Acessa o lastWriteTime e o formata no formato desejado.
$dateMod = $file.LastWriteTime.ToString("MM-dd-yyyy")
-
Para as variáveis
$first
e$second
, ele está acessando o caminho que foi dividido do lado direito (-1 seria o nome do arquivo, -2 é pai, -3 é pai desse pai e assim por diante) .$first = $pathParts[-3]
$second = $pathParts[-2]
-
Coloca todas as informações reunidas e renomeia o arquivo para as informações coletadas.
$file | Rename-Item -NewName "$first - $second - $dateMod.txt"