Eine Datei via Batch o.ä. an alle angeschlossenen Wechseldatenträger senden
Guten Tag alle zusammen,
ich habe ein Problem bzw. eine Frage in der mir vieleicht hier jemand helfen kann. Ich suche eine Batch, oder vieleicht etwas ähnliches, die es mir erlaubt eine beliebige Datei auf alle am Rechner angeschlossenen Wechseldatenträger gleichzeitig zu senden.
Mein Porblem ist, dass ich keine Ahnung von Batch habe.
Die Porblemstellung ist folgende. EIn Sportverein stellt bestimmte Videodateien, Dateien von Spielen anderer Vereine, seinen Spielerinnen zur Anschauungszwecken zur Verfügung. Nun müssen derzeit die Dateien in zeitaufwendiger Kleinarbeit einzeln auf USB Sticks geladen werden.
Der Gedange ist alle oder zumindest einen grossen Teil der Sticks an den Rechner anzuschliessen und dann via Batch die Datei gleichzeitig an alle zu senden. Sicher leidet die Geschwindigkeit darunter aber man kann ja wärenddessen andere Sachen erledigen und muss nicht immer Stick rein Stick raus spielen.
Vieleicht hat ja jemand hier eine helfande Idee
Vielen Dank fürs lesen
und einen entspannten Sonntag
ich habe ein Problem bzw. eine Frage in der mir vieleicht hier jemand helfen kann. Ich suche eine Batch, oder vieleicht etwas ähnliches, die es mir erlaubt eine beliebige Datei auf alle am Rechner angeschlossenen Wechseldatenträger gleichzeitig zu senden.
Mein Porblem ist, dass ich keine Ahnung von Batch habe.
Die Porblemstellung ist folgende. EIn Sportverein stellt bestimmte Videodateien, Dateien von Spielen anderer Vereine, seinen Spielerinnen zur Anschauungszwecken zur Verfügung. Nun müssen derzeit die Dateien in zeitaufwendiger Kleinarbeit einzeln auf USB Sticks geladen werden.
Der Gedange ist alle oder zumindest einen grossen Teil der Sticks an den Rechner anzuschliessen und dann via Batch die Datei gleichzeitig an alle zu senden. Sicher leidet die Geschwindigkeit darunter aber man kann ja wärenddessen andere Sachen erledigen und muss nicht immer Stick rein Stick raus spielen.
Vieleicht hat ja jemand hier eine helfande Idee
Vielen Dank fürs lesen
und einen entspannten Sonntag
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 161156
Url: https://administrator.de/contentid/161156
Ausgedruckt am: 23.11.2024 um 02:11 Uhr
7 Kommentare
Neuester Kommentar
Hallo jap-81!
Dieses VB-Script (*.vbs) würde zunächst mal nacheinander die Laufwerksbuchstaben der Wechseldatenträger in einer MsgBox ausgeben
wobei alle Wechseldatenträger erkannt werden, also z.B. auch Speicherkarten in Card-Reader... Um dies gegebenenfalls auszuschließen, könnte noch das FileSystem der Sticks z.B. "FAT32" oder die Größe des Speicherplatzes mit einbezogen werden?
Gruß Dieter
Dieses VB-Script (*.vbs) würde zunächst mal nacheinander die Laufwerksbuchstaben der Wechseldatenträger in einer MsgBox ausgeben
Const Removable = 1
Dim Fso, Drive
Set Fso = CreateObject("Scripting.FileSystemObject")
For Each Drive In Fso.Drives
If Drive.DriveType = Removable And Drive.IsReady = True Then
MsgBox Drive.DriveLetter
End If
Next
Gruß Dieter
Leider lassen sich auch USB-Sticks problemlos auf NTFS Formatieren...
Soll diese Batch-Datei viele Dateien Verschieben?
Also eine vollständige automatisierung halte ich für nur sehr schwer möglich.
Aber nach anfangseinstellungen sollte das Kopieren problemlos automatisiert werden können.
Wenn die Datei auf der Festplatte liegt, sollten sich die Geschwindigkeitseinbußen eigentlich im
Rahmen halten.
Ich schau mal was sich da machen lässt...
Der Ansatz von Dieter, die Wechseldatenträger über vbs zu ermitteln ist schon mal gar nicht übel...
Was ist das eigentlich für ein Rechner mit so vielen USB-Ports?
Oder habt ihr nur einen großen USB-Hub?
Gruß
BluBb_mADe
*Edit
Ein sinnvollter Tipp wäre vllt auch noch GCopy
Soll diese Batch-Datei viele Dateien Verschieben?
Also eine vollständige automatisierung halte ich für nur sehr schwer möglich.
Aber nach anfangseinstellungen sollte das Kopieren problemlos automatisiert werden können.
Wenn die Datei auf der Festplatte liegt, sollten sich die Geschwindigkeitseinbußen eigentlich im
Rahmen halten.
Ich schau mal was sich da machen lässt...
Der Ansatz von Dieter, die Wechseldatenträger über vbs zu ermitteln ist schon mal gar nicht übel...
Was ist das eigentlich für ein Rechner mit so vielen USB-Ports?
Oder habt ihr nur einen großen USB-Hub?
Gruß
BluBb_mADe
*Edit
Ein sinnvollter Tipp wäre vllt auch noch GCopy
Hallo,
klar gibt es da hundert Ideen/Möglichkeiten, z.B.:
- eine Homepage von der sich die Mitglieder die Dateien downloaden können
- Free File Hoster (eine "Festplatte" im Internet) von der sich die Mitglieder die Dateien downloaden können (z.B. http:\\www.wuala.com)
- ein FTP-Server
- die Dateien erst mal zu einem Paket packen (ZIP). Also ein selbstentpackendes Archiv erstellen.
- mit einem Synchronisierungsprogramm die Daten kopieren
Gruß
Wolfgang
klar gibt es da hundert Ideen/Möglichkeiten, z.B.:
- eine Homepage von der sich die Mitglieder die Dateien downloaden können
- Free File Hoster (eine "Festplatte" im Internet) von der sich die Mitglieder die Dateien downloaden können (z.B. http:\\www.wuala.com)
- ein FTP-Server
- die Dateien erst mal zu einem Paket packen (ZIP). Also ein selbstentpackendes Archiv erstellen.
- mit einem Synchronisierungsprogramm die Daten kopieren
Gruß
Wolfgang
Hallo jap-81,
versuche mal Dieses Skript:
Die Quelldateien können mit der Maus markiert werden und dann per Drag & Drop auf das Icon des obigen Batchfiles gezogen werden.
In Zeile 5 kann ein Zielordner angegeben werden, in dem die Dateien auf den Sticks abgelegt werden. Wenn dieser nicht existiert, wir er in Zeile 39 neu angelegt.
Wenn der Variablen
Der
[EDIT]
Aufgrund von Verbesserungsvorschlägen von bastla habe ich das Skript nochmal geändert, siehe mein nächstes Posting.
[/EDIT]
Gruß
Friemler
versuche mal Dieses Skript:
@echo off
setlocal enabledelayedexpansion
set "DestDir=Test"
set "WithLog=1"
set "SrcFiles=%*"
set "BlockBegin=0"
set "ValidDrive=0"
wmic /output:"%Temp%\WMICOut.txt" logicaldisk where description='Wechseldatenträger' get Name,FileSystem /value
for /f "tokens=1,2 delims==" %%i in ('type "%Temp%\WMICOut.txt"') do (
if /i "%%i" equ "FileSystem" set "BlockBegin=1"
if "!BlockBegin!" equ "1" if "%%j" neq "" set "ValidDrive=1"
if "!BlockBegin!" equ "0" if "!ValidDrive!" equ "1" (
set "Drive=%%j"
call :ProcessDrive
set "ValidDrive=0"
)
set "BlockBegin=0"
)
del "%Temp%\WMICOut.txt"
if "%WithLog%" equ "1" pause
exit /b
:ProcessDrive
setlocal disabledelayedexpansion
if not exist "%Drive%\%DestDir%" (
md "%Drive%\%DestDir%"
)
for %%f in (%SrcFiles%) do (
if "%WithLog%" equ "1" echo Kopiere %%~f nach %Drive%\%DestDir% ...
if "%WithLog%" equ "1" (copy "%%~f" "%Drive%\%DestDir%") else (copy "%%~f" "%Drive%\%DestDir%" > NUL)
if "%WithLog%" equ "1" echo.
)
if "%WithLog%" equ "1" echo.
endlocal
exit /b
In Zeile 5 kann ein Zielordner angegeben werden, in dem die Dateien auf den Sticks abgelegt werden. Wenn dieser nicht existiert, wir er in Zeile 39 neu angelegt.
Wenn der Variablen
WithLog
in Zeile 6 der Wert 1 zugewiesen wird, so wie in obigem Code, werden die Kopiervorgänge auf dem Bildschirm protokolliert und nachdem die Dateien auf alle USB-Sticks kopiert wurden, muss wegen dem Pause
-Befehl in Zeile 30 eine Taste gedrückt werden, um das Skript zu beenden. Wenn WithLog
in Zeile 6 der Wert 0 (oder etwas anderes) zugewiesen wird, erfolgt keine Bildschirmausgabe und das Skript wird auch von selbst beendet.Der
WMIC
-Befehl in Zeile 13 ermittelt alle am Rechner angeschlossenen Wechseldatenträger. Wie User didi1951 schon bemerkt hat, können darunter auch die Speicherkarten in Kartenlesern oder auch USB-Festplatten fallen. USB-Festplatten also vor der Kopieraktion abklemmen und aus Kartenlesern die Speicherkarten herausnehmen. In der FOR
-Schleife (Zeile 15-26) wird nämlich nur dann das Unterprogramm ProcessDrive
(in dem die Dateien kopiert werden) aufgerufen, wenn ein Wechseldatenträger mit formatiertem Speichermedium gefunden wird.[EDIT]
Aufgrund von Verbesserungsvorschlägen von bastla habe ich das Skript nochmal geändert, siehe mein nächstes Posting.
[/EDIT]
Gruß
Friemler
@Friemler
Einige Anmerkungen:
Auch wenn es hier ziemlich egal sein dürfte - nur für die Verwendung der Schalter "BlockBegin" und "ValidDrive" braucht's keine "delayedExpansion" - wenn Du anstelle von "1" einen beliebigen Wert zuweist und anstelle von "0" gar nix, kannst Du einfach mit "
Die Verwendung von "
(Achtung - liefert nur den Buchstaben, keinen ":")
[Edit] Der Ordnung halber fehlendes Leerzeichen nach "1" ergänzt [/Edit]
Was alle Vorschläge bisher nicht berücksichtigen ist der Wunsch,
Einen hab ich noch :
Um die "
Grüße
bastla
Einige Anmerkungen:
Auch wenn es hier ziemlich egal sein dürfte - nur für die Verwendung der Schalter "BlockBegin" und "ValidDrive" braucht's keine "delayedExpansion" - wenn Du anstelle von "1" einen beliebigen Wert zuweist und anstelle von "0" gar nix, kannst Du einfach mit "
if defined
" den Zustand abfragen.Die Verwendung von "
wmic
" setzt Admin-Rechte voraus - daher würde ich eher (temporäres) VBScript verwenden - zBFor Each D In CreateObject("Scripting.FileSystemObject").Drives:If D.DriveType=1 And D.IsReady Then:WScript.Echo D.DriveLetter:End If:Next
[Edit] Der Ordnung halber fehlendes Leerzeichen nach "1" ergänzt [/Edit]
Was alle Vorschläge bisher nicht berücksichtigen ist der Wunsch,
die Datei gleichzeitig an alle zu senden
Dazu könnten dann eigentlich nur mehrere Kopiervorgänge (zB durch Starten eines weiteren Batches mit Übergabeparametern "Quelle" und - an den jeweiligen Laufwerksbuchstaben angepasst - "Ziel") parallel gestartet werden ...Einen hab ich noch :
Um die "
wmic
"-Ausgabe (falls Du dabei bleiben willst) unmittelbar in einer "for
"-Schleife zu verwerten, könntest Du das auf folgender Basis versuchen:for /f "skip=2 tokens=2-3 delims=," %%i in ('"wmic logicaldisk where description='Wechseldatenträger' get Name,FileSystem /value /format:csv"') do if "%%j" neq "" echo %%i
bastla
Hi bastla,
ich habe das Skript aufgrund Deiner durchaus sinnvollen Verbesserungsvorschläge nochmal geändert. Wobei ich aber glaube, dass das "gleichzeitige kopieren" der Dateien nicht wörtlich gemeint war.
Dein Vorschlag, die Ausgabe von
Jetzt aber das Skript:
Gruß
Friemler
ich habe das Skript aufgrund Deiner durchaus sinnvollen Verbesserungsvorschläge nochmal geändert. Wobei ich aber glaube, dass das "gleichzeitige kopieren" der Dateien nicht wörtlich gemeint war.
Dein Vorschlag, die Ausgabe von
WMIC
im CSV-Format auszuwerten funktioniert nur, wenn man das Gleichheitszeichen der WHERE
-Klausel und das Komma zwischen FileSystem
und Name
beim GET
mit ^
escaped und natürlich %%i und %%j vertauscht . Aber selbst dann kommt es wieder zu Problemen wegen der fehlerhaften Ausgabe von WMIC
im ASCII-Mode unter Windows 7, hatten wir letztens schonmal in diesem Thread. Deshalb die Ausgabe von WMIC
am besten immer durch TYPE
ausgeben lassen und diese Ausgabe auswerten.Jetzt aber das Skript:
@echo off
setlocal
set "DestDir=Test"
set "WithLog=1"
set "SrcFiles=%*"
set "VBScript=%Temp%\GetDriveLetters.vbs"
> "%VBScript%" echo For Each D In CreateObject("Scripting.FileSystemObject").Drives
>>"%VBScript%" echo If D.DriveType=1 And D.IsReady Then
>>"%VBScript%" echo WScript.Echo D.DriveLetter
>>"%VBScript%" echo End If
>>"%VBScript%" echo Next
for /f %%i in ('cscript /nologo "%VBScript%"') do (
set "Drive=%%i:"
call :ProcessDrive
)
del "%VBScript%"
if "%WithLog%" equ "1" pause
exit /b
:ProcessDrive
if not exist "%Drive%\%DestDir%" (
md "%Drive%\%DestDir%"
)
for %%f in (%SrcFiles%) do (
if "%WithLog%" equ "1" echo Kopiere %%~f nach %Drive%\%DestDir% ...
if "%WithLog%" equ "1" (copy "%%~f" "%Drive%\%DestDir%") else (copy "%%~f" "%Drive%\%DestDir%" > NUL)
if "%WithLog%" equ "1" echo.
)
if "%WithLog%" equ "1" echo.
exit /b
Gruß
Friemler