Jacke Bone 0 Geschrieben 5. Mai 2016 Melden Teilen Geschrieben 5. Mai 2016 Hallo zusammen ich könnte mal Hilfe brauchen.In der Powershell bin ich echt neulin.Ich habe ein kleines Tool namens folderagent.Das überwacht ein Verzeichnis und führt dann ein Script aus.Das Unterverzeichis Tepm von Firefox soll Überwacht werden.nun gibt es streaming Portale die fragmentieren die MP4 Filme.Die einzelnen Filmstückchen lassen sich wieder zusammensetzen.Nun soll mein Script die Dateien sobald sie kompett sind. (wichtig)Umbenennen in (DatumUhrzeit)MMddyyyyhhmmss und dann eine laufende ZählerNR anfügen.Den Zähler hole ich aus einer Datei c:\Jacke.txt und zähle nach jeder umbenennung +1und speicher sie.Danach verschiebe ich sie in ein anders Verzeichnis.So bekomme ich ... so mein Plan, die Dateinamen aus dem Temp die ja nur wirre Dateinamen ohne endung sind.In die richtige reienfolge.Ich habe schon verschiede schreibweisen probiert und auch die Position der If abfragen verändert.Leider ohne erfolg.Ich hoffe einer weiß Rat.Vielen Dank im Vorraus. Hier das Script ## Pfad der überwacht wird$file = "c:\temp\firefox_cache\cache2\entries\"## in ext datum mit zeit schreinen{$ext = get-Date -format MMddyyyyhhmmss}## endung auf mp4 setzen{$mam =".Mp4"}## schleife mit MP4 wenn nur der*## da steht nimmt er alle datein im Folderforeach ($file in gci $file -include * -recurse)## zähler einen hochzählen{[int]$zaehler = [int]$zaehler + 1{ ## nimmt nur datein größer 49Kbif ($file.Length -gt 49KB )## Zählerstand aus txt datei holen{[string]$zaehler = Get-Content "C:\Jacke.txt"## dateiname zusamensetzen{$soso = $ext + [string]$zaehler + $mam{ ## umbenennen file_datetime.mp4rename-item -path $file -newname $soso}}}}};## Neuen Zählerstand abspeicher[string]$zaehler | out-file "C:\Jacke.txt" -Append$file = "C:\ablage\"$archive = "C:\ablage\archive\"foreach ($file in gci $file -include *.Mp4 -recurse){if ($file.Length -gt 5KB ){ ## verschieben in archive folderMove-Item -path $file.FullName -destination $archive }} Liebe Grüße Jacke Boone :schreck: Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 5. Mai 2016 Melden Teilen Geschrieben 5. Mai 2016 Bei einzelnen Zeilen brauchst du keine geschweiften Klammern. Vermutlich hast du ein Klammerproblem, dein Code ist aber schwer lesbar. Hast du ein Debugger (Power Gui oder Powershell ISE)? Dabei kannst du das Script zeilenweise durchgehen und dir die Inhalte der Variablen anschauen. Zitieren Link zu diesem Kommentar
Jacke Bone 0 Geschrieben 6. Mai 2016 Autor Melden Teilen Geschrieben 6. Mai 2016 Wie gesagt es läuft in einem Fenster des kleines Tools namens Folder Agent. Hat keinen Debugger. ## Pfad der überwacht wird $file = "c:\temp\firefox_cache\cache2\entries\" ## in ext Datum mit zeit schreiben {$ext = get-Date -format MMddyyyyhhmmss} ## Endung auf mp4 setzen {$mam =".Mp4"} foreach ($file in gci $file -include * -recurse) ## Zähler für Dateinamen um einns hochzählen {[int]$zaehler = [int]$zaehler + 1 { ## es sollen nur Dateien genommen werden die größer 49Kb sind. if ($file.Length -gt 49KB ) ## Zählerstand für Dateinamen aus txt Datei holen {[string]$zaehler = Get-Content "C:\Jacke.txt" ## Dateiname zusammensetzen {$soso = $ext + [string]$zaehler + $mam { ## umbenennen der Temp Datei in file_datetime.mp4 rename-item -path $file -newname $soso} } } } } ; ## Neuen Zählerstand in die Textdatei abspeichern [string]$zaehler | out-file "C:\Jacke.txt" -Append ## verschieben der Umbenannten Datei in C:\ablage\Archive\ $file = "C:\ablage\" $archive = "C:\ablage\archive\" foreach ($file in gci $file -include *.Mp4 -recurse) { if ($file.Length -gt 5KB ) { Move-Item -path $file.FullName -destination $archive } } :D Ich hoffe so ist es etwas übersichtlicher :D Zitieren Link zu diesem Kommentar
PowerShellAdmin 169 Geschrieben 6. Mai 2016 Melden Teilen Geschrieben 6. Mai 2016 (bearbeitet) Variablen Benamung unter aller ... und nahezu durchweg falsch inhaltlich falsch benannt. Im Regelfall musst du in der PowerShell einfache Variablen nicht mit dem Datentyp initialisieren (ist natürlich eine saubere Grundform). Geschweifte Klammern (hat man nur bei Ausführungsblöcken),uvm. immer noch nicht sauber, Einrückung auch nicht... Ansonsten viel Spaß bei der Spielerei ;) Unterstütze aber so ein fragwürdigen Code nicht. Die Inhalte sind im Regelfall nur für Streaming lizenziert... PS: EIn PS Skript kann je nach Umfang formatiert gerne mal 500 Zeilen und mehr haben(auch auf mehrere Dateien verteilt), Struktur ist wichtig ;) Bsp für saubere Formatierung: #Schleife Ausgabe Dateinamen Foreach($file in $folder){ #Ausgabe Dateiname $file.fullname } bearbeitet 6. Mai 2016 von PowerShellAdmin Zitieren Link zu diesem Kommentar
Jacke Bone 0 Geschrieben 6. Mai 2016 Autor Melden Teilen Geschrieben 6. Mai 2016 Variablen Benamung unter aller ... und nahezu durchweg falsch inhaltlich falsch benannt. Im Regelfall musst du in der PowerShell einfache Variablen nicht mit dem Datentyp initialisieren (ist natürlich eine saubere Grundform). Geschweifte Klammern (hat man nur bei Ausführungsblöcken),uvm. immer noch nicht sauber, Einrückung auch nicht... Ansonsten viel Spaß bei der Spielerei ;) Unterstütze aber so ein fragwürdigen Code nicht. Die Inhalte sind im Regelfall nur für Streaming lizenziert... PS: EIn PS Skript kann je nach Umfang formatiert gerne mal 500 Zeilen und mehr haben(auch auf mehrere Dateien verteilt), Struktur ist wichtig ;) Bsp für saubere Formatierung: #Schleife Ausgabe Dateinamen Foreach($file in $folder){ #Ausgabe Dateiname $file.fullname } Äh... ja Danke. Wie ich schon schrieb... In der Powershell bin ich ein echter Neuling. Aus Kritik kann ich meistens auch etwas lernen.. Dazu müsste ich aber deine Ausführungen verstehen.... " ... und nahezu durchweg falsch inhaltlich falsch benannt." ?????? was meinst du damit ?? "Geschweifte Klammern (hat man nur bei Ausführungsblöcken)" , ????? ok muss ich mal Googlen " Unterstütze aber so ein fragwürdigen Code nicht" ????Fragwürdig ????? na ich meine doch, welche Dateien ich auf meiner Festplatte hin und her schubse und umbenenne kann nicht illegal sein -- Oder?. ( ach herrjemine hoffentlich kommt nun nicht eine lage Diskussion darüber) wollte doch nur ein paar brauchbare Tips.... :confused: Gruß Jacke Boone Zitieren Link zu diesem Kommentar
PowerShellAdmin 169 Geschrieben 6. Mai 2016 Melden Teilen Geschrieben 6. Mai 2016 (bearbeitet) Dein Quotierung ist genauso furchtbar wie dein PowerShell Code.... Da du meine -konstruktive- Kritik scheinbar nicht erkannt hast, hier noch mal kurz und hoffentlich verständlicher. -Diverse Variablen sind inhaltlich falsch benannt.(Variable für Folder nennst du File und das geht so weiter). -Ausführungsblöcke benötigt man nur bei mehreren Ausführungen innerhalb einer Bediengung oder Schleife -Variable aus einfachen Dateitypen(Int, String) muss man in der Regel nicht definieren (da kann man sich jetzt über die Form streiten) -Das Codebeispiel dient dir dazu eine verständliche Formatierung, Kommentierung, Einrückung, Zeilenabstände als auch Benamung zu zeigen. " Unterstütze aber so ein fragwürdigen Code nicht" ????Fragwürdig ????? na ich meine doch, welche Dateien ich auf meiner Festplatte hin und her schubse und umbenenne kann nicht illegal sein -- Oder?. ( ach herrjemine hoffentlich kommt nun nicht eine lage Diskussion darüber)Hier gibts keine Diskussion - ich unterstütze so einen Blödsinn jedenfalls nicht - Davon abgesehen dass deine Aussage falsch ist. wollte doch nur ein paar brauchbare Tips.... Ähm ja ... ernsthaft ? bearbeitet 6. Mai 2016 von PowerShellAdmin Zitieren Link zu diesem Kommentar
Jacke Bone 0 Geschrieben 10. Mai 2016 Autor Melden Teilen Geschrieben 10. Mai 2016 Ja ersthaft... Der Programmcode ist bestimmt immernocht nicht toll, aber funktioniert schon mal grob. Was noch nicht richtig funktioniert, ist die reihenfolge der Dateien. und ich weiß leider nicht warum. :confused: ## 1Pfad der überwacht wird$verznam = "c:\temp\firefox_cache\cache2\entries\"## 5in ext datum mit zeit schreinen$ext = get-Date -format MMddyyyyhhmmss$zusa ="_"## 8endung auf mp4 setzen$nde =".Mp4" foreach ($verznam in gci $verznam -include * -recurse){ ## 19nimmt nur datein größer 490Kbif ($verznam.Length -gt 90KB ){## Zählerstand aus txt datei holen[string]$zaehler = Get-Content "C:\Jacke.txt" ## dateiname zusamensetzen$soso = $ext + $zusa + [string]$zaehler + $nde ## 26umbenennen file_datetime.mp4rename-item -path $verznam -newname $soso |Wait-Job -state "Completed"## zähler einen hochzählen[int]$zaehler = [int]$zaehler + 1}};$verznamneu = "c:\temp\firefox_cache\cache2\entries\"$archive = "F:\ablage\archive\"foreach ($verznamneu in gci $verznamneu -include *.Mp4 -recurse){if ($verznamneu.Length -gt 90KB ){ ## verschieben in archive folderMove-Item -path $verznamneu.FullName -destination $archive## Neuen Zählerstand abspeicher Force überschreibt die datei[string]$zaehler | out-file "C:\Jacke.txt" -Force }} Zitieren Link zu diesem Kommentar
Esta 114 Geschrieben 11. Mai 2016 Melden Teilen Geschrieben 11. Mai 2016 Hallo, du verwechselst in deinem Script Files und Folder, bzw. Datei und Verzeichnis. Und die Windows Powershell ISE sollte dir beim Debuggen helfen. Schön und lesbarer wäre es auch, wenn du dein Script hier im Editor unter Code eintragen und entsprechende Einrückungen machen würdest. Das wäre der Button "<>" unter dem Smiley. Siehe den Hinweis von PowerShellAdmin. Zitieren Link zu diesem Kommentar
Jacke Bone 0 Geschrieben 14. Mai 2016 Autor Melden Teilen Geschrieben 14. Mai 2016 Hallo Esta, vielen Dank für deine Antwort. Ich habe das mal mit den Einrücken probiert. Ich denke mal, das es dafür Regeln gibt ... oder??? :confused:wie gesagt bin Anfänger. Ich habe jetzt das ganze mal anders gemacht.Erst die Datei verschieben dann umbenennen.Ich hoffe mal das ich nun nicht mehr Files und Folder durcheinander bringe.Das ganze läuft schon sehr gut.Ein kleins Problem gibt es noch Move-Item -path $verznam.FullName -destination $archive |Wait-Job -state "Completed" hier hätte ich erwartet, dass erst die Datei verschoben wird wenn sie komplett ist. Ich bekomme immer die Fehlermeldung, dass die Datei von einen anderen Prozess benutzt wird. Wenn die Datei komplett ist, verschieb das script die Datei wie gewollt. ( aber die Fehlermeldung nervt...) Dagegen habe ich sleep -S 2 eingebaut. Das klappt ganz gut ist ja aber nicht der Sinn der Sache. Wie geht das richtig??? Die Datei erst verschieben wenn sie komplett ist ??? und was habe ich an diesen Befehl falsch versteanden. Wait-Job -state "Completed" dachte genau dafür ist er da??? Liebe Grüße Jacke Boone ## Pfad der überwacht wird$verznam = "c:\temp\firefox_cache\cache2\entries\" ## in ext datum mit zeit schreinen $ext = get-Date -format MMddyyyyhhmmss ## Dateiname Zusatz vor Zähle $zusa ="_" ## endung auf mp4 setzen $nde =".Mp4"## Hier der Pfad des Zielverzeichnis$archive = "F:\ablage\archive\"## schleife zum verschieben der Datei + pause sleep -S 4foreach ($verznam in gci $verznam -include * -recurse) { if ($verznam.Length -gt 130KB ) { ## verschieben in archive folder Move-Item -path $verznam.FullName -destination $archive |Wait-Job -state "Completed" } } sleep -S 2## Jede Datei im Verzeichnis Umbennenforeach ($archive in gci $archive -include * -recurse) { ## nimmt nur datein größer 130Kb if ($archive.Length -gt 130KB ) {## Zählerstand aus txt datei holen [string]$zaehler = Get-Content "C:\Jacke.txt" ## dateiname zusamensetzen $soso = $ext + $zusa + [string]$zaehler + $nde ## umbenennen file_datetime.mp4 rename-item -path $archive -newname $soso |Wait-Job -state "Completed" ## zähler einen hochzählen [int]$zaehler = [int]$zaehler + 1## Neuen Zählerstand abspeicher Force überschreibt die datei[string]$zaehler | out-file "C:\Jacke.txt" -Force } }; Zitieren Link zu diesem Kommentar
Esta 114 Geschrieben 17. Mai 2016 Melden Teilen Geschrieben 17. Mai 2016 Hallo, Ich habe das mal mit den Einrücken probiert. Ich denke mal, das es dafür Regeln gibt ... oder??? :confused: Ja sicher gibt es das. Du kannst dir Beispiele im Internet suchen oder dir ein Buch zu Powershell besorgen (z.B. Bibliothek) und lernen. Jeder ist mal Anfänger. Move-Item -path $verznam.FullName -destination $archive |Wait-Job -state "Completed" Das "Wait-Job" ist an der Stelle falsch. "move-item" ist ein Comandlett und kein Job. Ein Job wäre, wenn du aus dem Powershell Script ein anderes Script oder eine exe startest und dein Script erst weiter laufen soll, wenn dieses Script oder die exe beendet ist. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.