Batch Script: Nur auf betsimmte USB Sticks kopieren
Folgende Situation:
Habben in der Lateinklasse 30 Schüler, jeder mit USB-Stick und einen riesen HUB.
Suche ein solches Script, bzw. erweiterung für eins ganz unten:
*Kopiert den Ordner "C:\Latein" auf bestimmte Ordner bestimmter USB Sticks
*evtl. MSGBOX: Kopieren fertig
da laufwerksbuchsatben ja nie gleichbleiben müsste warscheinlich irgendeine signatur/ID auf dem stiock ausgelesen werden
wenns geht das ganze auch noch andersrum, d.h. alles aus den Ordner "Latein2" auf den sticks in den Ordner "C:Latein2"
Kann mir wer helfen?
Habben in der Lateinklasse 30 Schüler, jeder mit USB-Stick und einen riesen HUB.
Suche ein solches Script, bzw. erweiterung für eins ganz unten:
*Kopiert den Ordner "C:\Latein" auf bestimmte Ordner bestimmter USB Sticks
*evtl. MSGBOX: Kopieren fertig
da laufwerksbuchsatben ja nie gleichbleiben müsste warscheinlich irgendeine signatur/ID auf dem stiock ausgelesen werden
wenns geht das ganze auch noch andersrum, d.h. alles aus den Ordner "Latein2" auf den sticks in den Ordner "C:Latein2"
Kann mir wer helfen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 52966
Url: https://administrator.de/forum/batch-script-nur-auf-betsimmte-usb-sticks-kopieren-52966.html
Ausgedruckt am: 21.04.2025 um 20:04 Uhr
17 Kommentare
Neuester Kommentar
Vielleicht hilft es dir, wenn die Laufwerksbuchstaben ein bissl gebändigt würden: USBDLM
Textdateien auf die Sticks USB_Stick.txt und per Batch auf die abfragen.
if exist e:\USB_Stick.txt copy ....
if exist f:\USB_Stick.txt copy ....
if exist g:\USB_Stick.txt copy ....
if exist h:\USB_Stick.txt copy ....
if exist i:\USB_Stick.txt copy ....
Da funktioniert auch mit unterschiedlichen txt Dateien und dardurch unterschiedlichen copybefehlen.
if exist e:\USB_Stick.txt copy ....
if exist f:\USB_Stick.txt copy ....
if exist g:\USB_Stick.txt copy ....
if exist h:\USB_Stick.txt copy ....
if exist i:\USB_Stick.txt copy ....
Da funktioniert auch mit unterschiedlichen txt Dateien und dardurch unterschiedlichen copybefehlen.
Hi,
also zuerst auf allen Sticks folgende Dateien anlegen:
- 1 Datei. Der Name der Datei soll vorname_nachname.xyz sein
- 1 Datei. Diese Datei soll auf jeden Stick mit dem gleichen Namen (aaa_23424.xyz - Vorraussetzung!!!).
Eine Datei ist für das kopieren zum Stick nötig und die andere für das kopieren von allen angeschlossenen Sticks. Durch das aaa... muss sein, sonst steht die Datei mit dem Namen nicht zu letzt da. Die Endung ist so gewollt!!
Hier mal die v0.1:
Ist leider ungetestet. Aber du wirst die nicht vorhandenen Fehler bestimmt selber lösen können. Ansonsten einfach wieder melden. *gg*
Grüße
Dani
also zuerst auf allen Sticks folgende Dateien anlegen:
- 1 Datei. Der Name der Datei soll vorname_nachname.xyz sein
- 1 Datei. Diese Datei soll auf jeden Stick mit dem gleichen Namen (aaa_23424.xyz - Vorraussetzung!!!).
Eine Datei ist für das kopieren zum Stick nötig und die andere für das kopieren von allen angeschlossenen Sticks. Durch das aaa... muss sein, sonst steht die Datei mit dem Namen nicht zu letzt da. Die Endung ist so gewollt!!
Hier mal die v0.1:
@echo off & setlocal
::Variablen
set from_usb=aaa_23424..xyz
echo Abfrage
echo 1 - Datei auf einen Stick kopieren
echo 2 - Dateien vom Stick auf Festplatten kopieren
echo.
set /p abschnitt=Menue:
echo.
if /i "%abschnitt%" == "1" (
::Frage nach dem Schülername - Zwischen Vorname und NAchname muss ein _,
::sonst kann der nicht nachschauen, welches Laufwerk zutrifft
set /p name=Schueler (vorname_nachname):
for /D %%a in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
REM Überprüft, ob Laufwerk vorhanden
if /i exist %%a: (
::Überpürft, ob die vorname_nachname Datei vorhanden ist
if /i exist "%%a:\%name%.xyz" (
::Kopiert die Dateien von C auf den Stick
xcopy /e /v /c /i /y "C:\Latein" "%%a:\latein"
)
)
)
)
if /i "%abschnitt%" == "2" (
for /l %%a in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
REM Überprüft, ob Laufwerk vorhanden
if /i exist %%a: (
::Überpürft, ob die aaa_ - DATEI vorhanden ist
if /i exist "%%a:\%from_usb%.xyz" (
::Liest den Namen der Schülers aus
for /f "delmis=. tokens=1" %%b in ('dir /b "%%a:\*.xyz"') do (
::Erstellt einen Ordner auf C: mit dem Namen des Schülers
if not exist "C:\Latein2\%%b" mkdir "C:\Latein2\%%b"
::Kopiert alle Dateien aus dem Ordner und fügt diese auf C:latein\name ein
xcopy /e /v /c /i /y "%%a:\latein2" "C:\Latein2\%%b"
)
)
)
)
)
echo Fertig!
pause
Grüße
Dani
Moin Sam-Razr und Dani,
ein paar kleine kosmetische Änderungen habe ich eingebaut.
Sieht jetzt so aus:
TODO's:
--> unbedingt die Liste der in Frage kommenden USB-Laufwerksbuchstaben einschränken.
Von A: bis Z: ist (egal auf welchem Rechner) Dönekens.
--> Unbedingt noch eine Meldung zum Unterscheiden von "es wurde etwas" und "es wurde nichts" kopiert. Nach dem Xcopy.
Gruss
Biber
ein paar kleine kosmetische Änderungen habe ich eingebaut.
Sieht jetzt so aus:
@echo off & setlocal
::Variablen
set from_usb=aaa_Signatur_Schülerstick.sig
:again
echo Abfrage
echo 0 - Batch beenden, keine Aktion
echo 1 - Datei auf einen Stick kopieren
echo 2 - Dateien vom Stick auf Festplatten kopieren
echo.
set /p abschnitt=Menue:
echo.
if "%abschnitt%" LSS "0" if "%abschnitt%" GEQ "2" goto :again
If %abschnitt%=="0" goto :eof
goto :Abschnitt%abschnitt%
:Abschnitt1
REM ---if /i "%abschnitt%" == "1" (
::Frage nach dem Schülername - Zwischen Vorname und NAchname muss ein _,
::sonst kann der nicht nachschauen, welches Laufwerk zutrifft, vorname nachname werden individuell ersetzt
set /p name=Schueler (vorname_nachname):
for %%a in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
REM Überprüft, ob Laufwerk vorhanden
REM -- if /i exist %%a: (
REM ::Überprüft, ob die vorname_nachname Datei vorhanden ist
Dir %%a: 2>&1|find "nicht bereit" >nul || if /i exist "%%a:\%name%.sig" (
REM Kopiert die Dateien von C auf den Stick
xcopy /e /v /c /i /y "C:\Latein" "%%a:\Latein"
)
)
goto :EndOfWork
:Abschnitt2
REM ---if /i "%abschnitt%" == "2" (
for %%a in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
Dir %%a: 2>&1|find "nicht bereit" >nul || if exist "%%a:\%from_usb%" (
REM Liest den Namen der Schülers aus
for /f "delims=. tokens=1" %%b in ('dir /b "%%a:\%from_usb"') do (
REM Erstellt einen Ordner auf C: mit dem Namen des Schülers
if not exist "C:\Latein2\%%b" mkdir "C:\Latein2\%%b"
REM Kopiert alle Dateien aus dem Ordner und fügt diese auf C:latein\name ein
xcopy /e /v /c /i /y "%%a:\latein2" "C:\Latein2\%%b"
)
)
)
)
:endOfWork
echo Fertig!
pause
TODO's:
--> unbedingt die Liste der in Frage kommenden USB-Laufwerksbuchstaben einschränken.
Von A: bis Z: ist (egal auf welchem Rechner) Dönekens.
--> Unbedingt noch eine Meldung zum Unterscheiden von "es wurde etwas" und "es wurde nichts" kopiert. Nach dem Xcopy.
Gruss
Biber
Moin Sam-Razr und Dani,
wenn du magst, Sam-Razr, dann poste doch mal den überarbeiteten Stand.
Dann machen wir noch eine gemeinschaftliche Vier(zig)-Augen-Kontrolle des Schnipsels.
Denn so ganz richtig ernsthaft hab ich damals auch keine Änderungen getestet, eher grob zusammengeharkt.
Eben ist mir jedenfalls aufgefallen, dass die Wahrscheinlichkeit, dass ein eingegebenes Zeichen sowohl kleiner Null als auch größergleich 2 ist, doch nicht gross genug ist für einen Schul-Einsatz.
Die Kiddies würden Dich für so einen Klopfer in die Schülerzeitung bringen.
Deshalb:
[also: wenn %abschnitt% kleiner "0" geheZu :again andernfalls wenn %abschnitt% grösser "2" geheZu :again]
Genauer hab ich aber noch nicht nachgeschaut ... sollte ja nur einer grobe Korrektur sein.
Vom Fertigstellungsdatum des final release candidates mal abgesehen: eigentlich könntest Du die Frage aber schon auf "gelöst" setzen, oder?
Gruss Biber
wenn du magst, Sam-Razr, dann poste doch mal den überarbeiteten Stand.
Dann machen wir noch eine gemeinschaftliche Vier(zig)-Augen-Kontrolle des Schnipsels.
Denn so ganz richtig ernsthaft hab ich damals auch keine Änderungen getestet, eher grob zusammengeharkt.
Eben ist mir jedenfalls aufgefallen, dass die Wahrscheinlichkeit, dass ein eingegebenes Zeichen sowohl kleiner Null als auch größergleich 2 ist, doch nicht gross genug ist für einen Schul-Einsatz.
Die Kiddies würden Dich für so einen Klopfer in die Schülerzeitung bringen.
Deshalb:
<u>Streiche:</u> if "%abschnitt%" LSS "0" if "%abschnitt%" GEQ "2" goto :again
<u>Setze:</u> if "%abschnitt%" LSS "0" (goto :again ) Else if "%abschnitt%" GTR "2" goto :again
[also: wenn %abschnitt% kleiner "0" geheZu :again andernfalls wenn %abschnitt% grösser "2" geheZu :again]
Genauer hab ich aber noch nicht nachgeschaut ... sollte ja nur einer grobe Korrektur sein.
Vom Fertigstellungsdatum des final release candidates mal abgesehen: eigentlich könntest Du die Frage aber schon auf "gelöst" setzen, oder?
Gruss Biber
Moin Sam-Razr,

Zu Deiner Frage
Den Beitrag kannst Du als Beitragsersteller auf "gelöst/erledigt" setzen,
indem Du dich anmeldest und dann auf den Eröffnungsbeitrag (also die Frageselbst) gehst.
Dort den Button "Editieren" drücken, im aufgehenden Fenster kommen ein paar Kontrollkästchen.
Unter anderem "Dieser Beitrag gilt als gelöst".
Der erzeugt den grünen Haken.
Dann kann jeder andere Forumsbenutzer von weitem erkennen:
Für die Frage "Batch Skript - Nur auf bestimmte USB-Sticks kopieren" gab es mindestens einen brauchbaren Lösungsansatz.
Gruss
Biber
Ich bin heute ziemlich im Stress
Wir alle arbeiten mit M$-Produkten.. Zu Deiner Frage
Den Beitrag kannst Du als Beitragsersteller auf "gelöst/erledigt" setzen,
indem Du dich anmeldest und dann auf den Eröffnungsbeitrag (also die Frageselbst) gehst.
Dort den Button "Editieren" drücken, im aufgehenden Fenster kommen ein paar Kontrollkästchen.
Unter anderem "Dieser Beitrag gilt als gelöst".
Der erzeugt den grünen Haken.
Dann kann jeder andere Forumsbenutzer von weitem erkennen:
Für die Frage "Batch Skript - Nur auf bestimmte USB-Sticks kopieren" gab es mindestens einen brauchbaren Lösungsansatz.
Gruss
Biber