Log-Daten mit PowerShell sortieren?!

puffisworld

Commodore
Registriert
Juni 2005
Beiträge
4.310
Guten Tag,

ich habe folgende Situation:

Log-Daten aus einer Anlage kommen in folgender Ordnerstrucktur:

dd_mm_jj\name.xlsm

Das lässt sich bescheiden bearbeiten. Ich versuche nun die Daten in einem Ordner zu konsolidieren und umzubenennen:

order\jj_mm_dd-name.xlsm

Leider konnte ich nach einiger Recherche im Internet nicht fündig werden.
Ich bin auch kein professioneller Programmierer, aber habe minimale Grundkenntnisse.
Mit PowerShell habe ich noch nicht viel gemacht.

Ich stelle es mir so vor, dass das Script die Ordnernamen in einen String packt, damit ich diesen in Variablen zerlegen kann um dann die Namen entsprechend anzupassen.

Ich weiß nur leider nicht, wie ich diesen String erstelle. (gci?)
Das kopieren und umbennen mit Variablen ist gar kein Problem.
Der Zeitstempel der Daten kommt leider nicht in Frage, da dieser sehr unterschiedlich sein kann.

Vielen Dank im Voraus!
 
Code:
dir . -Recurse | % {
  if( $_.FullName -match "(?<d>\d+)_(?<m>\d+)_(?<y>\d+)\(?<name>[^\]+)$" )
  {
    $fn = ("..\{0}_{1}_{2}-{3}" -f $Matches.y,$Matches.m,$Matches.d,$Matches.name)
    ("move {0} to {1}" -f $_.FullName,$fn) | Out-Host
    #mv $_ $fn
  }
}
ungetestet
 
@Yuuri
Ich glaube regex ist da fast ein bisschen overkill.

Wenn die Ordnerstruktur tatsächlich so einfach ist tuts auch ein einfaches string.split() um die einzelnen Komponenten des Datums zu bekommen:
Code:
$date = "24_12_15".split('_')
"{0}_{1}_{2}-dateiname.xlsm" -f $date[2],$date[1],$date[0]
Ist so auch leichter verständlich für Leute die kein regex können.
 
Ja, ich sagte ja, dass ich den String dann aufteilen kann, ich aber nicht weiß, wie ich mir den passenden String aus dem Ordnernamen holen kann. Denn das ist ja alles durcheinander.

01_01_16
01_02_16
02_01_16
....


Und das noch bei 2015.
 
Code:
Get-ChildItem | ?{ $_.PSIsContainer } | Select-Object name
 
Vielen Dank schon mal an alle. :)

Das mit gci habe ich mir gedacht. Und wie lasse ich das ganz nun Ordner für Ordner durchwandern?
 
Ich bin da nun so mal rangegangen:
Code:
gci -directory | % { $_.Name.split('_') }
gci "c:\Ordner*" -include *.xlsm -recurse  | % { copy-item -Destination "c:\Ordner\Ordner\{0}_{1}_{2}-.xlsm" -f $_[2],$_[1],$_[0] -force }
 
hier als powershell:

unter dem Verzeichnis C:\temp\test liegen die Ordner...

Code:
$directorysource = "C:\temp\test"
$directorydest = "C:\temp\ziel"

$folders = Get-ChildItem $directorysource | ?{ $_.PSIsContainer }

foreach($folder in $folders){
	$dir = $directorysource + "\" + $folder.name
	$files = Get-ChildItem $dir

	foreach($file in $files){
		$newname = $folder.name + "-" + $file.name
		Rename-Item $file.VersionInfo.filename $newname
		$newfile = $dir + "\" + $newname
		move-item $newfile -destination $directorydest
	}
}
 
Sehr geil schon mal!
Jetzt muss ich mir das zurecht bauen, damit er eine bestimmte Datei aus dem Ordner zieht.
Da sind nämlich mehrere xmls. :)

DANKE!
 
Code:
$files = Get-ChildItem $dir | ?{$_.name -like "*ga.xlms"}
 
Zurück
Oben