Also ich versuche, eine Reihe von MSSQL Backups umbenennen, die wie kommen:Einzeiliger verrohrt Schleife mit File Check und Umbenennen
DBName_backup_2017_12_20_564451321_567987465.bak
zu etwas wie
DBName.bak
Aber auch eine haben Sicherheitsüberprüfung, um sicherzustellen, dass, wenn DBName.bak
bereits vergeben ist, DBName_1.bak
. Wobei 1 eine inkrementelle Variable ist, bis ein gültiger nicht verwendeter Dateiname existiert.
Ich konnte es mit dem folgenden Code tun:
Get-ChildItem *_*.bak | % {
# Set the new name, replace everything after the first underscore '_' with
# '.bak'
$newName = &{$_.Name -replace $_.Name.Substring($_.Name.IndexOf("_")), '.bak'}
# Check if new name exists
for ($cnt = 1; (Test-Path $newName) -eq $true; $cnt++) {
# If it already exists add '_' and a number check again until unused
# filename is found
$newName = &{$newName -replace '.bak', "_$cnt.bak"}
}
# Rename file to new filename. Uncomment WhatIf for testing.
Rename-Item -Path $_ -NewName $newName #-WhatIf
}
Was ich versuche jetzt zu tun ist, um eine Zeile ist es mit Rohrleitungen, aber kein Glück habe. Insbesondere die Schleife mit dem Test-Path
überprüfen zu überprüfen. Weiß jemand wie ich das könnte?
> Wenn Sie nur Dateien mit doppelten Datenbanknamen (re) nummerieren möchten, können Sie das Ding nicht wirklich einzeilen. Das war, wovor ich Angst hatte. Na gut, danke, dass du mir gezeigt hast, wie man die While mit dem Test-Pfad verbindet. –