Jump to content

Powershell If Abrage mit meher Befehle


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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 +1
und 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 Folder
foreach ($file in gci $file -include * -recurse)
## zähler einen hochzählen
{[int]$zaehler = [int]$zaehler + 1
{    ## nimmt nur datein größer 49Kb
if ($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.mp4
rename-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 folder
Move-Item -path $file.FullName -destination $archive

  }
}
 

Liebe Grüße Jacke Boone :schreck:

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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 von PowerShellAdmin
Link zu diesem Kommentar

 

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  

 

 

 

 

 

Link zu diesem Kommentar

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 von PowerShellAdmin
Link zu diesem Kommentar

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 490Kb
if ($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.mp4
rename-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 folder
Move-Item -path $verznamneu.FullName -destination $archive
## Neuen Zählerstand abspeicher Force überschreibt die datei
[string]$zaehler | out-file "C:\Jacke.txt" -Force
  }
}

Link zu diesem Kommentar

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.

Link zu diesem Kommentar

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 4
foreach ($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 Umbennen
foreach ($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

    }
        }
;

 

Link zu diesem Kommentar

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.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...