nxtrex
Goto Top

Get-content fail

Hallo,

ich habe ein Script, dass Text- Dateien durchliest und diese danach umbenennen soll.
Jetzt habe ich das Problem das das Script leider nicht funktioniert.
Bitte um Unterstützung.

Hier das Script (Powershell):

$Dateien=get-childitem c:\Location\test2
$wert1 = @("BMG-Lagerbestand")
$wert2 = @("BMG-Materialbelege")
$wert3 = @("BMG-Lieferungen")
foreach ($wert in $werte)
{
foreach($Datei in $Dateien){

if ((get-content c:\Location\test2\$Datei) -contains $wert1)
{Rename-Item c:\Location\test2\$Datei c:\Location\test2\KON_Bestand_BMG.txt}
else
{echo "nein"}

if ((get-content c:\Location\test2\$Datei) -contains $wert2)
{Rename-Item c:\Location\test2\$Datei c:\Location\test2\KON_WE_BMG.txt}
else
{echo "nein"}

if ((get-content c:\Location\test2\$Datei) -contains $wert3)
{Rename-Item c:\Location\test2\$Datei c:\Location\test2\KON_WA_BMG.txt}
else
{echo "nein"}

}
}

MfG Nick

Content-ID: 642566

Url: https://administrator.de/contentid/642566

Ausgedruckt am: 22.11.2024 um 04:11 Uhr

NordicMike
NordicMike 20.01.2021 um 10:18:21 Uhr
Goto Top
foreach ($wert in $werte)
$werte ist nicht definiert bzw leer, also wird nichts darunter ausgeführt
Nxtrex
Nxtrex 20.01.2021 um 10:19:19 Uhr
Goto Top
Und wie behebe ich das?
Doskias
Doskias 20.01.2021 aktualisiert um 10:24:22 Uhr
Goto Top
Wieso machst du das nicht so wie ich es gestern gepsotet habe?
$werte = @("BMG-Lagerbestand","BMG-Materialbelege","BMG-Lieferungen")  

Wobei so wie du das machst, brauchst du dann foreach ($wert in $werte) gar nicht mehr.
Nxtrex
Nxtrex 20.01.2021 um 10:25:25 Uhr
Goto Top
Weil er dann alle 3 Dateien gleich benennt und die sollen Unterschiedliche Namen bekommen

Er macht nichts und zeig immer den Fehler:

get-content: der pfad ... kann nicht gefunden werden oder existiert nicht. obwohl er existiert
Doskias
Doskias 20.01.2021 um 10:27:16 Uhr
Goto Top
Dann lass das foreach Weg, wenn du eh die Werte nicht im Array abbildest.

$Dateien=get-childitem c:\Location\test2
$wert1 = @("BMG-Lagerbestand")  
$wert2 = @("BMG-Materialbelege")  
$wert3 = @("BMG-Lieferungen")  

foreach($Datei in $Dateien){

if ((get-content c:\Location\test2\$Datei) -contains $wert1)
{Rename-Item c:\Location\test2\$Datei c:\Location\test2\KON_Bestand_BMG.txt}
else
{echo "nein"}  

if ((get-content c:\Location\test2\$Datei) -contains $wert2)
{Rename-Item c:\Location\test2\$Datei c:\Location\test2\KON_WE_BMG.txt}
else
{echo "nein"}  

if ((get-content c:\Location\test2\$Datei) -contains $wert3)
{Rename-Item c:\Location\test2\$Datei c:\Location\test2\KON_WA_BMG.txt}
else
{echo "nein"}  

}

Sollte auf den ersten Blick so funktionieren. Und beim nächsten Mal bitte 1. Codeklammern nutzen und 2. gleich schreiben was nicht geht. Sonst verliert man die Lust zum helfen.
Nxtrex
Nxtrex 20.01.2021 um 10:29:04 Uhr
Goto Top
Es funktioniert jetzt aber er schmeißt mir diesen Fehler raus:

get-content : Der Pfad "C:\Location\test2\P64.100.FILE.52718.AQA0Z_MCW_SA.JOB..210118.224557.txt" kann nicht gefunden werden, da er nicht vorhanden ist.
In Zeile:13 Zeichen:6

back-to-topif ((get-content c:\Location\test2\$Datei) -contains $wert2)

back-to-top~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : ObjectNotFound: (C:\Location\tes...0118.224557.txt:String) [Get-Content], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand
Doskias
Doskias 20.01.2021 um 10:36:35 Uhr
Goto Top
Ja ist ja klar. Wenn deine erste IF-Bedingung die Datei umbenennt, dann kann die zweite und dritte die Abfrage nicht mehr ausführen.

das kannst du mit einem test-path abfangen
Nxtrex
Nxtrex 20.01.2021 um 10:37:47 Uhr
Goto Top
Und wie baue ich das am besten ein?
Doskias
Lösung Doskias 20.01.2021 um 10:42:44 Uhr
Goto Top
So sollte es gehen

$Dateien=get-childitem c:\Location\test2
$wert1 = @("BMG-Lagerbestand")  
$wert2 = @("BMG-Materialbelege")  
$wert3 = @("BMG-Lieferungen")  

foreach($Datei in $Dateien){

if ((get-content c:\Location\test2\$Datei) -contains $wert1)
{Rename-Item c:\Location\test2\$Datei c:\Location\test2\KON_Bestand_BMG.txt}
else
{echo "nein"}  

if (test-path c:\Location\test2\$Datei)
{
if ((get-content c:\Location\test2\$Datei) -contains $wert2)
{Rename-Item c:\Location\test2\$Datei c:\Location\test2\KON_WE_BMG.txt}
else
{echo "nein"}  
}

if (test-path c:\Location\test2\$Datei)
{
if ((get-content c:\Location\test2\$Datei) -contains $wert3)
{Rename-Item c:\Location\test2\$Datei c:\Location\test2\KON_WA_BMG.txt}
else
{echo "nein"}  
}

}
Nxtrex
Nxtrex 20.01.2021 um 10:47:11 Uhr
Goto Top
Danke das ganze klappt jetzt ohne Fehler und läuft einwandfrei.
Vielen Dank @Doskias
NordicMike
NordicMike 20.01.2021 um 11:20:18 Uhr
Goto Top
Aber, man merkt, dass deine Lernkurve unten bleibst, weil du fertige Lösungen ersuchst. Gebe dir einen Powershell kurs, sonst bleibst du für immer auf fremde Hilfe angewiesen.
LeeX01
LeeX01 20.01.2021 um 12:45:12 Uhr
Goto Top
Zitat von @NordicMike:

Aber, man merkt, dass deine Lernkurve unten bleibst, weil du fertige Lösungen ersuchst. Gebe dir einen Powershell kurs, sonst bleibst du für immer auf fremde Hilfe angewiesen.

Warum sollte sich das auch ändern, wenn er doch schnell und kostenlos funktionierende Lösungen bekommt?

"Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."
NordicMike
NordicMike 20.01.2021 um 14:40:18 Uhr
Goto Top
Gib einem Mann einen Fisch
Diesen Spruch habe ich sogar selbst vor ein paar Tagen hier gebracht. Ich bin selbst so eingestellt, dass ich keine Komplettlösungen gebe, sondern nur Hinweise, wie man weiter machen muss bzw in welche Richtung weiter recherchiert werden muss. Leider gibt es genügend leute, die freiwillig eine Komplettlösung erarbeiten. Darauf ist die gesamte Facebook- und Instageneration aufgebaut. Wir von der alten Klingeltongeneration ticken da noch anders und da gibt es eben Reibereien.
Doskias
Doskias 20.01.2021 um 14:48:38 Uhr
Goto Top
Tja wie man es macht man macht es falsch face-smile

Grundsätzlich stimme ich euch da zu und bin auch eher ein Freund von Denkanstößen. Aber hier hab ich es halt einfach aufgegeben, als nicht mal der Wille zu erkennen war die IF-Bedingung mit dem Test-Path selbst versuchen einzubauen. Ich hab da wirklich kurz mit mir überlegt ob ich da noch etwas zu schreibe oder es dabei belasse, habe mich dann aber entschieden, die Lösung nicht unfertig im Raum stehen zu lassen.

Allerdings:
Man kann auch die fertigen Skripte nehmen und schauen, dass man versteht was und wie da vor sich geht. Wir werden ja in Zukunft sehen ob hier ein Wille zum Lernen und zur Analyse der Lösung vorliegt. face-smile
LeeX01
LeeX01 20.01.2021 um 15:23:38 Uhr
Goto Top
Diesen Spruch habe ich sogar selbst vor ein paar Tagen hier gebracht.
cool hatte ich nicht mitbekommen

Wir von der alten Klingeltongeneration
Oh, Habe ich mich jetzt als alter Sack geoutet? face-smile

Teilweise ist es leider erschreckend wenn du siehst da hat jemand eine Minute gegoogled und das per CopyPaste ohne Gedanken zusammen geklatscht und haut es dann hier so hin.

Tja wie man es macht man macht es falsch face-smile
Ist doch bei uns letzten Endes immer so oder? Bitte nicht als persönlichen Angriff aufnehmen!
NordicMike
NordicMike 20.01.2021 um 15:56:41 Uhr
Goto Top
Teilweise ist es leider erschreckend wenn du siehst da hat jemand eine Minute gegoogled und das per CopyPaste ohne Gedanken zusammen geklatscht und haut es dann hier so hin.
Noch schlimmer ist es wenn er nicht weiss, was er damit tut und auf einmal hat er all seine Daten zerstört sind, natürlich ohne aktueller Sicherung :c)
LeeX01
LeeX01 20.01.2021 um 15:58:59 Uhr
Goto Top
Zitat von @NordicMike:

Teilweise ist es leider erschreckend wenn du siehst da hat jemand eine Minute gegoogled und das per CopyPaste ohne Gedanken zusammen geklatscht und haut es dann hier so hin.
Noch schlimmer ist es wenn er nicht weiss, was er damit tut und auf einmal hat er all seine Daten zerstört sind, natürlich ohne aktueller Sicherung :c)

Nö für mich nicht ganz so schlimm sind doch seine Daten face-smileface-smile