[Frage] Batch Scripting Dateien verschieben - Druckversion +- cgboard - classic games (https://cgboard.raysworld.ch) +-- Forum: Hard- und Software (https://cgboard.raysworld.ch/forumdisplay.php?fid=6) +--- Forum: Software, Coding und GFX (https://cgboard.raysworld.ch/forumdisplay.php?fid=19) +--- Thema: [Frage] Batch Scripting Dateien verschieben (/showthread.php?tid=27533) Seiten:
1
2
|
Batch Scripting Dateien verschieben - Pobeller - 17.10.2022 Hallo Leute, Ich sortiere grade ein paar Daten mit hilfe von einer bat und zwar so: @echo off move *-eph.zip "H:\Englische Isos\EUPHORiA" move *-TBT.zip "H:\Englische Isos\TBT" move *-nliso.zip "H:\Englische Isos\NLiSO" move *-deviance.zip "H:\Englische Isos\DEViANCE" move *-dev.zip "H:\Englische Isos\DEViANCE" move *-razor*.zip "H:\Englische Isos\RAZOR1911" move *-rzr.zip "H:\Englische Isos\RAZOR1911" move *-fairlight.zip "H:\Englische Isos\FAiRLiGHT" move *-flt.zip "H:\Englische Isos\FAiRLiGHT" move *-trueiso.zip "H:\Englische Isos\TRUEiSO" move *-intergang.zip "H:\Englische Isos\iNTERGANG" move *-prophet.zip "H:\Englische Isos\PROPHET" usw usw... Jetzt ist es nur sehr mühsam die jeweiligen daten hinter dem - zu nehmen und unterordner zu erstellen. das geht doch irgendwie bestimmt mit so einer for schleife oder? kann mir da jemand weiterhelfen? wäre auch für tips dankbar um das ganze noch viel mehr funktionabler zu machen. ich konnte mal c unter windows 98 programmieren aber das ist schon viel zu lange her. Batch verstehe ich heutzutage da schon eher von der logik.. vielen dank RE: Batch Scripting Dateien verschieben - GBuster - 17.10.2022 Hi, irgendwie habe ich das Problem noch nicht ganz verstanden. Also ist es, dass du, statt für jede Release-Group ein eigenes Muster zu hinterlegen, lieber ein generisches haben möchtest? RE: Batch Scripting Dateien verschieben - Pobeller - 17.10.2022 Verstehe deinen satz irgendwie nicht richtig. ich möchte die zip dateien in unterordner verschieben. es sollen alle dateien gescannt werden, und die bat soll wenn ein file "Release.Name-GrOUP" "gescannt" wird einen unterordner erstellen mit dem namen "GrOUP" Hatte schonmal überlegt mit so einem textfile als "Datenbank" für die Gruppen. hoff ich konnte meinen grundgedanken so erklären RE: Batch Scripting Dateien verschieben - goodsubarita - 18.10.2022 Ich würde für sowas Powershell nehmen, es ist einfach mächtiger als die Batch. Mein Ansatz wäre es, in einer Variable den Grundpfad zu speichern, den Dateinamen zu splitten nach "-", dann hast du ja schon deinen Ordnernamen und in einer If einweisung den Ordner (Grundpfad-Variable + teil des namens) erstellen oder wenn schon vorhanden, die Datei da rein schieben. Das ganze dann in eine Schleife packen. Probiere das mit Powershell aus, du wirst sehen es ist viel einfacher. dein Quellpfad dein Zielpfad schleife anfang dateinamen splitten prüfen ob Ordner da oder neu erstellen datei verschieben schleife ende RE: Batch Scripting Dateien verschieben - tomwatayan - 18.10.2022 Ich habe dir mal eine entsprechende Batchdatei gebaut. In Zeile 11 kannst du den Ausgabepfad ändern: Set "OutputPath=H:\Englische Isos" Funktioniert auch für Dateien mit Leerzeichen. Für Sonderzeichen geht's zumindest für Umlaute. Was exotischeres habe ich nicht ausprobiert. Einfach die Batchdatei starten und die Dateien im aktuellen Verzeichnis werden alle verschoben. Code: @echo off Die Datei muss als ANSI gespeichert werden. RE: Batch Scripting Dateien verschieben - Pobeller - 18.10.2022 danke für den tip. habe mal n bisschen gelesen. "Erstellen von Dateien und Schreiben von Daten in eine Datei Es stehen mindestens zwei integrierte Methoden für das Erstellen von Dateien und das Schreiben von Daten in diese Dateien zur Verfügung. Sie können das Cmdlet „Out-File“ verwenden: $text = 'Hello World!' | Out-File $text -FilePath D:\data\text.txt " und als ergebniss bekomme ich: "PS D:\> D:\hellow.ps1 Out-File : Das Argument für den Parameter "Encoding" kann nicht überprüft werden. Das Argument ist NULL oder leer. Geben Sie ein Argument an, das nicht NULL oder leer ist, und führen Sie den Befehl erneut aus. In D:\hellow.ps1:1 Zeichen:35 + $text = 'Hello World!' | Out-File $text -FilePath D:\data\text.txt + ~~~~~ + CategoryInfo : InvalidData: ( [Out-File], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.OutFileCommand " wobei Ordner erstellen mit: PS D:\> D:\mkfldr.ps1 Verzeichnis: D:\Data Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 18.10.2022 08:24 NewFolder PS D:\> " funktioniert. RE: Batch Scripting Dateien verschieben - D2001-SP1 - 18.10.2022 (18.10.2022, 07:25)Pobeller schrieb: $text = 'Hello World!' | Out-File $text -FilePath D:\data\text.txt " Moin, durch die sogenannte Pipe "|" wird die Ausgabe des vorherigen Befehls automatisch an den nächsten Befehl durchgereicht. Du musst, bzw. darfst, beim Kommando "Out-File" also nicht noch einmmal die Variable angeben. So sollte es dann also klappen: $text = 'Hello World!' | Out-File -FilePath D:\data\text.txt " Das ist aber dann reiner Powershell Code, und kein Batch Scripting mehr. RE: Batch Scripting Dateien verschieben - goodsubarita - 18.10.2022 So könnte es aussehen: Code: [string]$src = "C:\Users\andreas\Desktop\file" Zum Scripten würde ich VSCode empfehlen, mit der Powershell erweiterung. VSCode Mit STRG+Ö öffnest du die Konsole. RE: Batch Scripting Dateien verschieben - Pobeller - 18.10.2022 Ok Danke funktioniert. Ich sehe die vorteile der ps jetzt. war für mich vorher komplizierter als "echo HelloWorld > test.txt" ok jetzt habe ich ne textdatei mit den filenamen. jetzt würde ich gerne diesen datensatz nehmen und so filtern: datei1-text.zip datei2-txte.zip datei3-text.zip das nacher eine liste bei rauskommt die so aussieht -text -txte RE: Batch Scripting Dateien verschieben - goodsubarita - 18.10.2022 Wozu die Liste? Du kannst doch direkt in der Schleife Ordner erstellen und Dateien kopieren? Oder verstehe ich was falsch? RE: Batch Scripting Dateien verschieben - Pobeller - 18.10.2022 (18.10.2022, 08:36)goodsubarita schrieb: Wozu die Liste?Ziel für mich ist es, ein Script zu haben um Ordner struktur anhand von Quell files Und / oder meiner danbank.txt Zu erstellen. Später soll es noch die dateien In die richtigen Ordner verschieben Und ganz grosse zukunftsmusik --> die hash Werte der Dateien innerhalb Der zip Dateien ermitteln und diese Werte auch in einer Datenbank speichern MySQL evtl ganz später mal RE: Batch Scripting Dateien verschieben - goodsubarita - 18.10.2022 Ich glaube MySQL wäre wie Elefanten auf Spatze geworfen. CSV oder JSON oder wenn es wirklich abertausende Einträge werden sollten, SQLITE CSV ist superpraktisch, weil man die auch mit Excel editieren / mit Daten bestücken kann. RE: Batch Scripting Dateien verschieben - D2001-SP1 - 18.10.2022 Also, goodsubarita hatte dir ja schon fast den kompletten Code für dein ursprüngliches Vorhaben gegeben. Es fehlten eigentlich nur noch die Befehle um Ordner zu erstellen und die Dateien zu kopieren. Das kann alles mit in die Schleife. Habe das hier gerade mal getestet, damit sollte das automatische erstellen der Ordner, und kopieren der Source Dateien problemlos funktionieren: Code: [string]$src = "D:\test" RE: Batch Scripting Dateien verschieben - tomwatayan - 18.10.2022 Für das Beispiel ist Powershell wirklich viel übersichtlicher als meine Batch-Lösung. Ich muss mich irgendwann auch mal mit Powershell befassen. Eine Anmerkung: Copy-Item klingt nicht nach dem gleichen wie "move" in Batch, sondern eher, als hat man die Dateien dann doppelt? RE: Batch Scripting Dateien verschieben - D2001-SP1 - 18.10.2022 (18.10.2022, 13:48)tomwatayan schrieb: Eine Anmerkung: Copy-Item klingt nicht nach dem gleichen wie "move" in Batch, sondern eher, als hat man die Dateien dann doppelt? Jep, Copy-Item erstellt eine Kopie der original Datei, Move-Item wäre der Befehl zum tatsächlichen verschieben der Quelldatei. Ich persönlich finde Kopien immer besser, sollte im Script doch etwas schief laufen hat man immer noch die Ursprungsdateien im Original Zustand. RE: Batch Scripting Dateien verschieben - goodsubarita - 18.10.2022 ... dem ist nix mehr hinzuzufügen :-) Sehe ich auch so. RE: Batch Scripting Dateien verschieben - Pobeller - 18.10.2022 Danke für die vielen zahlreichen tips. Bin grade wieder nach Hause gekommen und werde gleich alles mal durchlesen und umsetzten. RE: Batch Scripting Dateien verschieben - Pobeller - 18.10.2022 whuut whuut es funzt. function Show-CustomMenu { param ([string]$menuname = 'Fancy File Tool') Clear-Host Write-Host "================ $menuname ================" Write-Host "1: Group Ordner erstellen von Daba" Write-Host "2: Group Ordner erstellen von Zips" Write-Host "3: Move Zips to Group Ordner" Write-Host "4: " Write-Host "" Write-host "" Write-Host "" Write-host "" Write-Host "Q: Ente" Write-Host "" Write-host "" } Show-CustomMenu –menuname 'Fancy File Tool' $auswahl = Read-Host "What do you want todo today?" switch ($auswahl){ '1' {'Sie haben Option 1 gewählt.'} #Variabel machen evtl mit eingabe? Get-Location evtl '2' { [string]$src = "D:\SortierApp" [string]$dest = "D:\SortierApp" # Quellverzeichniss einlesen $fileList = Get-Item "$src\*.zip" Write-Host $fileList # Anfang der Schleife foreach ($file in $fileList) { # Sicher gehen dass nur Dateien angezeigt werden if( $file -is [System.IO.FileInfo]) { # aktuelle Datei anzeigen Write-Host "Datei inkl. Pfad: $file" $fileNamewoPath = [System.IO.Path]::GetFileNameWithoutExtension($file) Write-Host "Nur Dateiname: $fileNamewoPath" # Dateiname nach "-", gesplittet, zwei Teile, deswegen [1] am Ende # uns interessiert nur der zweite Teil $folderName = $fileNamewoPath.Split('-')[1] Write-Host "Der Teil, der uns interessiert: $folderName" # Prüfen ob das Verzeichniss existiert if(Test-Path "$dest\$foldername") { Write-Host "Ja, ist da" } else { Write-Host "nein, muss ich ehm erstellen" New-Item -Path "$dest\$foldername" -ItemType Directory } } } } '3' {'Option Nummer 3 gewählt.'} '4' {'Oder doch Nummer 4?!'} 'q' {exit} } vielen lieben dank nochmal. powershell ist genau das richtige für mich vom gefühl her RE: Batch Scripting Dateien verschieben - goodsubarita - 18.10.2022 Bitte :-) Wenn du bei Powershell beliben willst, es gibt wie gesagt nix besseres als VSCode mit der PS erweiterung. Probier's aus, du willst nie wieder anders Scripten... RE: Batch Scripting Dateien verschieben - Pobeller - 18.10.2022 (18.10.2022, 13:48)tomwatayan schrieb: Für das Beispiel ist Powershell wirklich viel übersichtlicher als meine Batch-Lösung. Ich muss mich irgendwann auch mal mit Powershell befassen. Momentan ist move-item die beste lösung für mich da sämtliche einzusortierenden dateien unikate sind also nix mit doppelt usw... später mal wenn ich funktionen einbaue die mit dateinamen veränderungen zu tun haben werde ich bis zum stable zustand auch nur kopien machen (18.10.2022, 07:02)tomwatayan schrieb: Ich habe dir mal eine entsprechende Batchdatei gebaut. In Zeile 11 kannst du den Ausgabepfad ändern: danke, ist archiviert kommt zum gebrauch wenn ich das script auf msdos umsetzen möchte (18.10.2022, 12:12)D2001-SP1 schrieb: Also, goodsubarita hatte dir ja schon fast den kompletten Code für dein ursprüngliches Vorhaben gegeben. Es fehlten eigentlich nur noch die Befehle um Ordner zu erstellen und die Dateien zu kopieren. Das kann alles mit in die Schleife. Habe das hier gerade mal getestet, damit sollte das automatische erstellen der Ordner, und kopieren der Source Dateien problemlos funktionieren: Danke dir sehr dafür. das hat mich richtig heiss gemacht auf powershell |