sieger
Goto Top

Dateien auf USB-Stick kopieren

Liebe Community,
ich hätte eine Frage und bin mir sicher, dass man mir hier behilflich sein kann.

Ich habe folgendes To-Do bzw. Wunsch:

Windows 10
1.) Ich möchte auf einen USB-Stick zwei Ordner von einem Netzwerklaufwerk kopieren. Wie kann ich explizit einstellen, dass es die Ordner in das jeweilige Laufwerk kopieren soll? Mittels Powershell/Batch kann man das ja recht einfach integrieren, aber die Laufwerkbezeichnung kann ja immer variieren und das möchte ich gerne verhindern.

Bestünde auch die Möglichkeit, dass nach Beendigung des Vorgangs sich die Datei von selbst löscht?

Es handelt sich um eine gezippte Datei, die dann mittels Script extrahiert werden soll (Script ist fertig und soweit auch funktionsfähig)

2.) Die gezippte Datei liegt dann am USB-Stick und soll am C:Laufwerk kopiert werden. Da die Laufwerkbezeichnung ja variieren kann, wie kann ich das einstellen, dass das Script in diesem Ordner nach der Datei suchen soll und dann in C: kopieren soll?

tar -xvzf D:\OrdnerX\DateiX.tar.gz -C C:\OrdnerX

Freue mich auf Antworten!
LG

Content-Key: 6751707116

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

Printed on: May 2, 2024 at 23:05 o'clock

Member: TK1987
TK1987 Apr 13, 2023 updated at 07:12:58 (UTC)
Goto Top
Moin,

Zitat von @SieGer:
1.) Ich möchte auf einen USB-Stick zwei Ordner von einem Netzwerklaufwerk kopieren. Wie kann ich explizit einstellen, dass es die Ordner in das jeweilige Laufwerk kopieren soll? Mittels Powershell/Batch kann man das ja recht einfach integrieren, aber die Laufwerkbezeichnung kann ja immer variieren und das möchte ich gerne verhindern.
Ein paar mehr Infos wären ganz hilfreich...

  • Ist immer nur ein USB-Laufwerk angeschlossen?
- Dann könntest du z.B.
# Laufwerksbuchstaben der ersten Partition des USB-Sticks ermitteln
$USB = Get-Disk | ? BusType -eq "USB" | Get-Partition | Select -First 1 -ExpandProperty DriveLetter  

  • Verwendest du immer den selben USB-Stick?
- Dann kannst du stattdessen natürlich auch nach dessen UniqueId, SerialNumber, Partuuid, ... filtern

  • Verwendest du mehrere USB-Sticks und hast teilweise auch mehrere USB-Geräte angeschlossen?
- Dann kannst du dich auch ein einheitliches Volumelabel festlegen und nach diesem filtern.

Bestünde auch die Möglichkeit, dass nach Beendigung des Vorgangs sich die Datei von selbst löscht?
Klar kannst du mit Powershell nach dem kopieren die Datei am Ursprungsort auch löschen lassen.

2.) Die gezippte Datei liegt dann am USB-Stick und soll am C:Laufwerk kopiert werden. Da die Laufwerkbezeichnung ja variieren kann, wie kann ich das einstellen, dass das Script in diesem Ordner nach der Datei suchen soll und dann in C: kopieren soll?
siehe oben

Gruß Thomas
Member: kpunkt
kpunkt Apr 13, 2023 at 07:13:18 (UTC)
Goto Top
Wenn du unter Windows dem USB-Stick einen festen Laufwerksbuchstaben zuweist, dann wird ihm dieser auch wieder zugewiesen, wenn du ihn neu anstöpselst. Muss man aber an jedem USB-Port machen, an dem man den Stick einstöpselt.
Windows vergibt in der Regel ja immer den nächsten freien Buchstaben. Wenn du da einen weiter hinten im Alphabet vergibst, bist du da ziemlich sicher.

Ansonsten evtl. was per Taskplaner und P/VID des Sticks.
Aber da gibts doch so ein kleines Programm, mit dem man automatische Sicherungen auf einen USB-Stick starten kann, sobald man den Stick anstöpselt. Mir fällt da nur der Name nicht ein.
Member: SieGer
SieGer Apr 13, 2023 at 07:18:57 (UTC)
Goto Top
Vielen Dank für eure Antworten.
Es sind immer unterschiedliche USB-Sticks (ca. 60 an der Zahl), die immer an den unterschiedlichen Windows Clients die Dateien vom Netzwerkordner auf den USB-Stick kopieren sollen und dann wieder an den unterschiedlichen Windows Clients diese Dateien entpackt und in das C:Laufwerk kopiert werden sollen.
Member: beidermachtvongreyscull
beidermachtvongreyscull Apr 13, 2023 at 07:40:17 (UTC)
Goto Top
Zitat von @SieGer:

Vielen Dank für eure Antworten.
Es sind immer unterschiedliche USB-Sticks (ca. 60 an der Zahl), die immer an den unterschiedlichen Windows Clients die Dateien vom Netzwerkordner auf den USB-Stick kopieren sollen und dann wieder an den unterschiedlichen Windows Clients diese Dateien entpackt und in das C:Laufwerk kopiert werden sollen.

Ich würde vom Volume-Label ausgehen.
Du kannst Laufwerke zwar nicht immer den gleichen festen Buchstaben zuordnen, aber was zeitgleich geht ist das Volume-Label und das kannst Du auslesen.

Ein VBS-Snippet:

set fso = CreateObject("Scripting.FileSystemObject")  

set drive = fso.GetDrive("D")  

Wscript.Echo "AvailableSpace =", drive.AvailableSpace   
Wscript.Echo "DriveLetter    =", drive.DriveLetter      
Wscript.Echo "DriveType      =", drive.DriveType        
Wscript.Echo "FileSystem     =", drive.FileSystem       
Wscript.Echo "FreeSpace      =", drive.FreeSpace        
Wscript.Echo "IsReady        =", drive.IsReady          
Wscript.Echo "Path           =", drive.Path             
Wscript.Echo "RootFolder     =", drive.RootFolder       
Wscript.Echo "SerialNumber   =", drive.SerialNumber     
Wscript.Echo "ShareName      =", drive.ShareName        
Wscript.Echo "TotalSize      =", drive.TotalSize        
Wscript.Echo "VolumeName     =", drive.VolumeName       

Mit geschickter Prüfung findest Du dann den Laufwerksbuchstaben auf Basis des Volumennamens und kannst die Scriptbefehle dynamisch alternieren.
Member: Crusher79
Crusher79 Apr 13, 2023 at 07:49:35 (UTC)
Goto Top
Hallo,

naja Buchstaben sind Schall und Rauch. Man kann USB Devices einfach auflisten lassen und nach Inhalt schauen. So viele werden es ja zur selben Zeit nicht sein. Geht also schnell.

Ich meine via PowerShell USB Devices erkennen lassen. Dann Prüfung ob Ordner da ist- fertig. Oder einfach eine Text File im Root vom Stick ablegen, dass nach Prüfung da schon klar ist, dass der Stick er richtige ist. Dan wie gewohnt die Ordner von A nach B kopieren.

Hier wurde vereinbart, dass D immer ein Backup Stick ist. Lief permanent mit.

Bei mehreren USB Devices nur daruf achten, dass ein Array zurück kommt! Sonst bricht das Script ab.

Hier wurde nur D: erwartet. Du kannst aber die Ausgabe des "USB Objektes" mit For-Each durchlaufen und wenn du den "Marker" (Ordner Namen / Datei im Root) gefunden hast, Aktion XY ausführen.

Hier wurde z.B. einfach gelöscht. Bei dir wäre es entsprechend der Kopiervorgang.

Teste einfach vorher mit mehrern Sticks das Verhalten und lass dann das Objekt mti ForEach durchlaufen. Die Prüfung von Ordnern und Dateien laufen wie gewohnt mit PowerShell ab.....

Function Script:DeleteOldest($zipFileName)
    {
        $pc = $env:COMPUTERNAME
        $usb = get-wmiobject -class "Win32_LogicalDisk" -namespace "root\CIMV2" -computername $pc -Filter "DriveType='2'"  

        # if ($usb.Name -contains "D:")  
		if (@($usb | Select-Object -Expand Name) -contains "D:")  
            {

                $data_size = 0
                $usb_size = Get-WMIObject Win32_Logicaldisk  -filter "DeviceId='D:'" | Select-Object -expand freespace  
                $data_size = (Get-Item $zipFileName).Length/1MB + 10
                if ( $usb_size/1MB -lt $data_size ) { Get-ChildItem D:\ | ? { $_.Extension -eq ".zip" -and ( $_.Name -like "*sysdb*" -or $_.Name -like "*usrdb*"  ) } | Sort-Object -Property LastWriteTime | Select-Object -first 3 | Remove-Item  }  
                if(-not $?) { $Script:MOVEErrorMsg += "`r`n`r`nPlatz auf USB schaffen... Failed: " + $error[0].exception.message }  

            }

    }
Member: Lochkartenstanzer
Lochkartenstanzer Apr 13, 2023 at 08:00:34 (UTC)
Goto Top
Moin,

Mach einfach einen "Target-Marker" auf die gewünschte Quell- oder Zielpartition, z.B. eine Datei namnes "$Dies-ist-die-Quelle-allen-Übels.txt" oder "$Am-Ende-endet-alles-hier-im-Nirvana.txt" und klappere per Powerschell einfach alle Laufwerksbuchstaben ab, ob die Datei auf dem Laufwerk ist. Dann ist es irrelevant, ob und wie sich die Laufwerksbuchstaben verschieben oder ob mehrere Partiotionen auf dem Stick sind. Du findest dann imer das richtige Filesystem.

lks
Mitglied: 3063370895
3063370895 Apr 13, 2023 updated at 08:07:19 (UTC)
Goto Top
Falls die Volumenamenänderung und lks' Vorschlag nicht in Betracht kommen, hier eine Möglichkeit mit Erkennung von 0/1/mehreren USB-Laufwerken und Auswahlmöglichkeit falls es mehrere gibt:

$USBDrives = (Get-CimInstance Win32_Volume -Filter "DriveType='2'").DriveLetter  
switch ($USBDrives.Count) {
    0 { Write-Host "Kein USB-Laufwerk erkannt" }  
    1 {
        $drive = $USBDrives 
    }
    Default {
        for ($i = 0; $i -lt $USBDrives.Count; $i++) {
            Write-Host "$i fuer $($USBDrives[$i])"  
        }
        $drive = $USBDrives[[Int32]::Parse($(Read-Host "Welches Laufwerk?"))]  
    }
}
if ($drive) {
    Write-Host "USB-Laufwerk: $drive"  
    # kopieren
}
Member: TK1987
TK1987 Apr 13, 2023 updated at 08:12:12 (UTC)
Goto Top
Sofern das Skript ebenfalls auf dem jeweiligen USB-Stick liegt, könnte man natürlich auch das Laufwerk des gestarteten Skripts nehmen.

Was ich noch nicht ganz verstehe: Du willst eine Datei zuerst vom Netzwerkpfad auf den USB-Stick kopieren, diese dann vom USB-Stick aus nach C: entpacken lassen und die Datei dann wieder vom USB-Stick löschen... Warum nicht einfach direkt vom Netzwerkpfad nach C: entpacken lassen?

Gruß Thomas
Mitglied: 3063370895
3063370895 Apr 13, 2023 updated at 08:17:20 (UTC)
Goto Top
Zitat von @TK1987:
Was ich noch nicht ganz verstehe: Du willst eine Datei zuerst vom Netzwerkpfad auf den USB-Stick kopieren, diese dann vom USB-Stick aus nach C: entpacken lassen und die Datei dann wieder vom USB-Stick löschen... Warum nicht einfach direkt vom Netzwerkpfad nach C: entpacken lassen?

Das habe ich auch nicht verstanden. Vielleicht ist das ganze ja auch ein XY-Problem
Vermute mal es geht um verschiedene PCs, die nicht im gleichen Netz sind.
Member: SieGer
SieGer Apr 13, 2023 at 08:40:26 (UTC)
Goto Top
Zitat von @TK1987:

Sofern das Skript ebenfalls auf dem jeweiligen USB-Stick liegt, könnte man natürlich auch das Laufwerk des gestarteten Skripts nehmen.

Was ich noch nicht ganz verstehe: Du willst eine Datei zuerst vom Netzwerkpfad auf den USB-Stick kopieren, diese dann vom USB-Stick aus nach C: entpacken lassen und die Datei dann wieder vom USB-Stick löschen... Warum nicht einfach direkt vom Netzwerkpfad nach C: entpacken lassen?

Gruß Thomas

Ich möchte folgendes:
1.) Eine Datei vom Netzwerkpfad auf den USB-Stick kopieren (mit Script, welches sich am Ende sobald es fertig ist, löscht)
2.) Die Daten aus dem USB-Stick nach C: entpacken

Die Geräte befinden sich nicht im gleichen Netzwerk und die Dateien sind ca. 100GB groß.
Die Endgeräte sind leider an Netzwerken angebunden, die kaum 8Mbit haben und über diese Leitung arbeiten einige andere Menschen, sodass man sich hier nicht auf das Netzwerk verlassen kann.
Member: Crusher79
Crusher79 Apr 13, 2023 at 09:25:13 (UTC)
Goto Top
Wie oft denn?

Netzwerk -> USB an EINEN oder MEHREREN Geräten?

Was soll gelöscht werden? Wirklich das Script oder die Datei im Netzwerk?

USB -> C: an EINEN oder MEHREREN Rechnern?

Wie oft das ganze? Hintergrudn: Aufgabenplanung die alle 15 min schaut ob Stick gesteckt ist und Daten zu holen sind.
Member: SieGer
SieGer Apr 13, 2023 at 10:07:33 (UTC)
Goto Top
Am USB-Stick soll ein Script zu finden sein, der ausgeführt wird und er die Daten vom Netzlaufwerk holt. Diesen Task wird es auf mehreren unterschiedlichen Geräten geben, auch zwei/drei USB-Sticks die an einen Endgerät angesteckt werden, sind nicht auszuschließen. Daraufhin dieser Task fertig ist, soll das Script gelöscht werden (und nicht die Daten am Netzwerk)

Beim anderen Task (also von USB auf Cface-smile wird immer nur ein USB-Stick am Rechner angesteckt. Der dann die Daten die am USB-Stick liegen einfach nur extrahieren soll und nach C: verschieben soll - nur weiß ich nicht genau, wie ich es ihm beibringen kann, dass er nach der .tar Datei im Verzeichnis sucht, in dem er sich gerade befindet.
Member: kpunkt
kpunkt Apr 13, 2023 at 10:52:22 (UTC)
Goto Top
Na dann ist es doch egal, welche Laufwerkszuordnung der Stick hat.
Script in einem Ordner, die Dateien im Unterordner.
Wieso wilst du das Script löschen? Das tut doch niemanden weh und du müsst es später nicht wieder auf die Sticks kopieren.
Autorun auf den Stick um die Dateien aus dem Netz zu kopieren. Beim entpacken der Datei auf die Festplatte dann manuell. Aber auch das könnte man gemeinsam in die Autorun packen und dort nach bestimmten Dateien suchen lassen. Und je nach Eintrag holt er sich die Dateien oder entpackt sie auf die Festplatte.

Es wäre halt auch eine Idee das LAN etwas besser zu gestalten. Dann könnte man das auch zentral erledigen. Aber das wird scheinbar nicht gehen.
Man könnte dann auch sowas wie Veeam einsetzen und die Bandbreit beim kopieren begrenzen. Keine Ahnung, wie oft da 100GB kopiert werden müssen.
Mitglied: 3063370895
3063370895 Apr 13, 2023 at 10:56:33 (UTC)
Goto Top
Autorun auf den Stick um die Dateien aus dem Netz zu kopieren.

wurde Autorun für USB-Sticks nicht schon mit Win 7 deaktiviert?
Member: Lochkartenstanzer
Lochkartenstanzer Apr 13, 2023 at 11:02:18 (UTC)
Goto Top
Zitat von @3063370895:

Autorun auf den Stick um die Dateien aus dem Netz zu kopieren.

wurde Autorun für USB-Sticks nicht schon mit Win 7 deaktiviert?

Man kann es wieder einschalten, wenn man sich traut. face-smile

lks
Member: NordicMike
NordicMike Apr 13, 2023 updated at 11:07:33 (UTC)
Goto Top
Wenn die Batch ebenfalls vom Stick gestartet wurde, hast du das aktuelle Laufwerk in der Variable %~dp0