Jump to content
Sign in to follow this  
Hypeside

Powershell Script Dateiverschiebung und -umbenennung

Recommended Posts

Hallo,

ich bräuchte etwas Hilfe.

Ich habe folgende Aufgabenstellung: 

Aus der xml die Variable „Rechnungsnummer“ auslesen <Rechnungsnummer>1646805</Rechnungsnummer>

Die danebenliegende gleichnamige PDF von „Rechnung_Legler_20190619165503.pdf“   nach  „Rechnung_Legler_1646805.pdf“  umbenennen.

Die xml Datei löschen.

Bis auf das löschen der XML Datei habe ich das auch hinbekommen, aber wie behandele ich das ganze, wenn mehr als ein Dateienpaar eintrifft?

Und das Script soll ab Start fortwährend laufen.

Hier mein bisheriger Code: 

$RootVerzeichnis = 'C:\Temp\DPC'
$SuchenNach = "20\d{12}"
[xml]$xml = Get-Content -Path $RootVerzeichnis\IN'\*.xml' | Out-String
$RGNR = $xml.XML.Table.Rechnungsnummer
Get-ChildItem $RootVerzeichnis\IN\*.pdf | Rename-Item -NewName {$_.Name -replace $SuchenNach,$RGNR}

Die Rechnung (Win Testseite) und die XML habe ich als Anhang beigefügt.

Kann mir jemand hier weiterhelfen?

Vielen Dank Vorab

LG Thomas 

Rechnung_Legler_20190619165503.pdf Rechnung_Legler_20190619165503.xml

Share this post


Link to post
Share on other sites

Hi,

 

bei mehreren XMLs wäre es ein Ansatz per For-Each die XMLs nacheinander abzuarbeiten oder dir immer nur die erste XML einzulesen.

#ForEach
Get-ChildItem -Filter *.xml | ForEach-Object { [xml]$xml = Get-Content -Path $_.FullName }

#Nur eine XML
$XMLPath = Get-ChildItem -Filter *.xml | Select-Object FullName -First 1
[xml]$xml = Get-Content -Path $XMLPath

Das Löschen sollte nachher mittels "Remove-Item" zu erledigen sein.

 

Gruß

Jan

Share this post


Link to post
Share on other sites

Hallo Jan,

Danke für die Antwort.

Ja das würde schon gehen, wobei ich die Paare berücksichtigen muss.

Also nicht nur die XML. Zu jeder XML gibt es eine PDF gleichen Namens.

 

Da brauch ich bestimmt ne neumodische Hashtable. Meine Ahnungslosigkeit nimmt zu :-)

Gruß

Thomas

Share this post


Link to post
Share on other sites

Das passende, eindeutige(?) PDF sollte sich doch anhand der RG Nummer identifizieren lassen?

Get-ChildItem $RootVerzeichnis\IN\ -Filter *.pdf | ? Name -imatch $($RGNR + ".pdf") | Rename-Item -NewName {$_.Name -replace $SuchenNach,$RGNR}

 

Share this post


Link to post
Share on other sites

Hallo Jan,

 

ich habe das jetzt so gebastelt:


# Variablen
$RootVerzeichnis = "C:\Temp\DPC"
$SuchenNach = "20\d{12}"

# 1tes XML File auslesen
$XMLPath = Get-ChildItem $RootVerzeichnis\IN\ -Filter *.xml | Select-Object FullName -First 1
[xml]$xml = Get-Content -Path $XMLPath | Out-String

# XML Ergebnisse
$RGFILE = $xml.XML.Table.Filename
$RGNR = $xml.XML.Table.Rechnungsnummer

# XML Ergebnisse anzeigen
echo $RGFILE
echo $RGNR

# Datei umbenennen
Get-ChildItem $RootVerzeichnis\IN\ -Filter *.pdf | ? Name -imatch $($RGFILE) | Rename-Item -NewName {$_.Name -replace $SuchenNach,$RGNR}

Leider klappt das mit dem Auslesen der XML in Zeile 8 nicht.

Die Variable von Zeile 7 wird korrekt angezeigt 

FullName                                         
--------                                         
C:\Temp\DPC\IN\Rechnung_Legler_20190619165503.xml

Danach kommt allerdings für mich unverständlich der folgende Fehler:

PS C:\temp\DPC> [xml]$xml = Get-Content -Path $XMLPath
Get-Content : Das Laufwerk wurde nicht gefunden. Ein Laufwerk mit dem Namen "@{FullName=C" ist nicht vorhanden.
In Zeile:1 Zeichen:13
+ [xml]$xml = Get-Content -Path $XMLPath
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (@{FullName=C:String) [Get-Content], DriveNotFoundException
    + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.GetContentCommand

Warum wird der Wert 'Fullname' mit in die Variable aufgenommen ?

 

 

Merci für die Hilfe

vor 35 Minuten schrieb testperson:

Das passende, eindeutige(?) PDF sollte sich doch anhand der RG Nummer identifizieren lassen?


Get-ChildItem $RootVerzeichnis\IN\ -Filter *.pdf | ? Name -imatch $($RGNR + ".pdf") | Rename-Item -NewName {$_.Name -replace $SuchenNach,$RGNR}

 

Hallo Jan, $RGNR geht nicht, kommt aus dem XML für die spätere benamung. Ich kann jedoch auf den Dateinamen in der XML zugreifen und diesen als $RGFile verwenden.

Hab es mit -ExpandProperty hinbekommen :-)

 

Jetzt fehl noch das löschen und die Schleife drumherum....

Share this post


Link to post
Share on other sites

Script läuft :-)

# Variablen
$RootVerzeichnis = "C:\Temp\DPC"
$SuchenNach = "20\d{12}"

# 1tes XML File auslesen
$XMLPath = Get-ChildItem $RootVerzeichnis\IN\ -Filter *.xml | Select-Object -ExpandProperty FullName -First 1
[xml]$xml = Get-Content -Path $XMLPath | Out-String

# XML Ergebnisse
$RGFILE = $xml.XML.Table.Filename
$RGNR = $xml.XML.Table.Rechnungsnummer

# Datei umbenennen
Get-ChildItem $RootVerzeichnis\IN\ -Filter *.pdf | ? Name -imatch $($RGFILE) | Rename-Item -NewName {$_.Name -replace $SuchenNach,$RGNR}

# XML löschen
Remove-Item $XMLPath

Es fehlt mir jetzt nur noch die Schleife über das ganze. Muss ich da eine Funktion draus machen, oder geht dies auch simpler?

Gruß

Thomas

Share this post


Link to post
Share on other sites

Ich würde ein foreach nehmen.

 

Du holst dir alle Dateinamen und gehst mit einem Foreach jeden einzelnen durch.

  • Thanks 1

Share this post


Link to post
Share on other sites

Mit foreach müsste ja jetzt die ganze Logik umgebaut werden. ;)

An der Stelle sollte es auch mit

while($XMLPath = ... -First 1){
	[xml]...
	...
	Remove-Item $XMLPath
}

gehen. Generell würde ich es aber einfach der Herausforderung wegen alles mal mit foreach durchspielen.

  • Thanks 1

Share this post


Link to post
Share on other sites
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Werbepartner:



×
×
  • Create New...