Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch Datei zum erkennen bestimmter USB-Sticks und beschreiben

Frage Entwicklung Batch & Shell

Mitglied: everytime420

everytime420 (Level 1) - Jetzt verbinden

28.05.2010, aktualisiert 18.10.2012, 4172 Aufrufe, 18 Kommentare

Guten Morgen

ich habe ein mehr oder weniger kleines Problem mit einer Batch Datei,
Ich habe ca. 100 USB-Sticks an Kunden verschickt mit einem kleinen Programm.
Nun will ich, dass diese Kunden die Sticks selbst updaten können,per Internet-Download .

Ich habe mir selbst eine Batch Datei geschrieben, die sämtliche Laufwerke abfrägt ob dort die Datei "TECHNIK2010.exe" liegt,
und falls sie dort liegt dann das Update einspielt. Sieht so aus:

@echo off
If Exist E:\Technik2010.exe xcopy %Thisdir%*.* E:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt
If Exist F:\Technik2010.exe xcopy %Thisdir%*.* F:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt
If Exist G:\Technik2010.exe xcopy %Thisdir%*.* G:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt
If Exist H:\Technik2010.exe xcopy %Thisdir%*.* H:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt
If Exist I:\Technik2010.exe xcopy %Thisdir%*.* I:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt
If Exist J:\Technik2010.exe xcopy %Thisdir%*.* J:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt
If Exist K:\Technik2010.exe xcopy %Thisdir%*.* K:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt
If Exist L:\Technik2010.exe xcopy %Thisdir%*.* L:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt
If Exist M:\Technik2010.exe xcopy %Thisdir%*.* M:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt
If Exist N:\Technik2010.exe xcopy %Thisdir%*.* N:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt
If Exist O:\Technik2010.exe xcopy %Thisdir%*.* O:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt
If Exist P:\Technik2010.exe xcopy %Thisdir%*.* P:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt
If Exist Q:\Technik2010.exe xcopy %Thisdir%*.* Q:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt
If Exist R:\Technik2010.exe xcopy %Thisdir%*.* R:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt
If Exist S:\Technik2010.exe xcopy %Thisdir%*.* S:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt
If Exist T:\Technik2010.exe xcopy %Thisdir%*.* T:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt
If Exist U:\Technik2010.exe xcopy %Thisdir%*.* U:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt
If Exist V:\Technik2010.exe xcopy %Thisdir%*.* V:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt
If Exist W:\Technik2010.exe xcopy %Thisdir%*.* W:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt
If Exist X:\Technik2010.exe xcopy %Thisdir%*.* X:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt
If Exist Y:\Technik2010.exe xcopy %Thisdir%*.* Y:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt
If Exist Z:\Technik2010.exe xcopy %Thisdir%*.* Z:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt
exit

Bei mir am PC funktioniert das auch super, nur wenn ich jetz an meinem Kollegen seinen PC bin der Kartenleser, 2 Laufwerke usw. usw.
hat dann frägt der erst die Kartenleser ab und bringt "Laufwerk ist nicht bereit.." und macht dann erst das Update.
Es sollte aber keine Fehlermeldung kommen.

Vielleicht hilft es auch, dass die Sticks alle den selben Namen haben? "TECHNIK2010"

Hab es bis jetz auch nur auf Windows XP getestet. Ich weiss nicht ob es auch auf Vista Rechnern läuft wegen Berechtigungen usw.

Hoffe ihr könnt mir helfen =)

Grüße
Mitglied: BigWim
28.05.2010 um 09:16 Uhr
Vielleicht hilf ja ein anderer Ansatz.

Zur Laufzeit der Batchdatei gibt es die Variable %CD%, die auf das aktuelle Verzeichnis zeigt.
Wenn also Deine Batchdatei vom USB-Stick gestartet wird, hast Du damit auch Laufwerksbuchstabe und Pfad.

Mit Set kannst Du auch einen Teilstring bilden, um z. B. nur den Laufwerksbuchstaben zu ermitteln (siehe Help set)

Markus
Bitte warten ..
Mitglied: bastla
28.05.2010, aktualisiert 18.10.2012
Hallo everytime420 und willkommen im Forum!

Vielleicht hilft Dir dieser Beitrag ...

Grüße
bastla
Bitte warten ..
Mitglied: bastla
28.05.2010 um 09:19 Uhr
Hallo BigWim und auch Dir ein Willkommen!
Zur Laufzeit der Batchdatei gibt es die Variable %CD%
Besser wäre in diesem Fall die Variable %0:
01.
echo Laufwerk: %~d0 
02.
echo LW und Ordner: %~dp0 
03.
echo Voller Pfad: $~f0
Mehr dazu am Ende der Onlinehilfe zu "for" ...

Grüße
bastla
Bitte warten ..
Mitglied: BigWim
28.05.2010 um 09:32 Uhr
Danke & Danke

Das kannte ich auch noch nicht. %0 war für mich "nur" Ausgabe des Filenamens.

Markus
Bitte warten ..
Mitglied: everytime420
28.05.2010 um 10:11 Uhr
Vielen Dank schon mal für die schnellen Antworten
Hab vergessen zu schreiben dass das Update nicht vom USB-Stick ausgeführt wird sondern von der Festplatte..

an bastla: Das ist schon sehr gut den Beitrag kenn ich auch mit dem habe ich mich gestern schon ausseinander gesetzt, nur funktioniert es bei mir nicht ganz
also wenn ich meine .exe in den code eintrage und es ausführe passiert einfach nichts.

01.
@echo off & setlocal 
02.
set "GUDL=%temp%\GetUSBDriveLetter.vbs" 
03.
echo Set fso=CreateObject("Scripting.FileSystemObject"):For Each D In fso.Drives:If D.DriveType=2 Then If D.IsReady Then If fso.FileExists(D.DriveLetter^&":\TECHNIK2010.Exe") Then WScript.Echo D.DriveLetter:Exit For>"%GUDL%" 
04.
echo Next>>"%GUDL%" 
05.
set LW= 
06.
for /f %%i in ('cscript //nologo "%GUDL%"') do set LW=%%i: 
07.
del "%GUDL%" 
08.
if not defined LW cls & echo USB-Festplatte leider nicht erkannt! & echo. & pause & goto :eof 
09.
echo USB-Festplatte ist Laufwerk %LW%
Normal Sollte dann ja die meldung mit "USB-Festplatte ist laufwerk E:" zb kommen oder?

Gruß



[Edit Biber] Codetags nachgetragen. [/Edit]
Bitte warten ..
Mitglied: bastla
28.05.2010 um 11:37 Uhr
Hallo everytime420!

Im verlinkten Beitrag ging es um eine Festplatte (mit "Drive.Type" 2) - für einen Stick sollte es 1 sein ...

Grüße
bastla
Bitte warten ..
Mitglied: everytime420
28.05.2010 um 11:55 Uhr
@ bastla

hab ich auch schon versucht aber dann findet er nichts. -> "..leider nicht erkannt"
mit drive.type 2 und der korrekten .exe findet er es glaub ich aber die batch schließt sich dann einfach anstatt weiter zu arbeiten,
wenn ich eine falsche .exe reinschreib, findet er auch nichts -> "..leider nicht erkannt"

Externe Festplatte wird doch auch als Removal erkannt oder nicht?

EDIT: also habs mit ner externen festplatte auch versucht mit der .exe drauf. Passiert genau dasselbe wie beim USB-Stick auch
cmd promt popt kurz auf und schließt sich sofort wieder.

gruß
Bitte warten ..
Mitglied: 60730
28.05.2010 um 15:13 Uhr
Moin,

cmd promt popt kurz auf und schließt sich sofort wieder.

Testbatch immer so starten:

  • start
  • ausführen
  • cmd
  • batch ins Fenster schieben

Keinesfalls per Doppelklick auf die .cmd/.bat- erst recht nicht, wenn das führende @echo off drin steht.

gruß
Bitte warten ..
Mitglied: bastla
28.05.2010 um 15:35 Uhr
Hallo everytime420!
cmd promt popt kurz auf und schließt sich sofort wieder.
Was Timo hinsichtlich des Testens eines Batches angemerkt hat, kann ich nur unterstützen: Um zu sehen, was passiert, brauchst Du entweder ein offenes CMD-Fenster oder zumindest als letzte Zeile im Batchablauf einen "pause"-Befehl ...

... dann könntest Du auch die "Erfolgsmeldung" lesen.

Grüße
bastla
Bitte warten ..
Mitglied: everytime420
31.05.2010 um 07:52 Uhr
Hey Leute,

okay schlimmer Anfänger Fehler jetz läufts danke
Jetz hab ich versucht wieder per xcopy drauf zu kopieren. Aber läuft nicht so ganz.
Wie muss ich das machen dass es nur kopiert, wenn er das Laufwerk auch tatsächlich gefunden hat?
So bringt er nur "Datei nocopy.txt konnte nicht gelesen werden" "0 Dateien kopiert".


@echo off & setlocal
set "GUDL=%temp%\GetUSBDriveLetter.vbs"
echo Set fso=CreateObject("Scripting.FileSystemObject"):For Each D In fso.Drives:If D.DriveType=2 Then If D.IsReady Then If fso.FileExists(D.DriveLetter^&":\TECHNIK2010.exe") Then WScript.Echo D.DriveLetter:Exit For>"%GUDL%"
echo Next>>"%GUDL%"
set LW=
for /f %%i in ('cscript //nologo "%GUDL%"') do set LW=%%i:
del "%GUDL%"
if not defined LW cls & echo USB-Festplatte leider nicht erkannt! & echo. & pause & goto :eof
echo USB-Festplatte ist Laufwerk %LW%

xcopy %Thisdir%*.* %LW%:\ /S /R /Y /H /I /E /V /exclude:nocopy.txt



Vielen Dank =)
Bitte warten ..
Mitglied: bastla
31.05.2010 um 10:23 Uhr
Hallo everytime420!
Wie muss ich das machen dass es nur kopiert, wenn er das Laufwerk auch tatsächlich gefunden hat?
Wenn es nicht gefunden wurde, erfährst Du das aufgrund der "if not defined ..."-Zeile (wenn Du den Batch unter "<code>" und "</code>"-Tags gepostet hättest, könnte ich hier die Zeilennummer nennen) und es wird der Batch beendet.
So bringt er nur "Datei nocopy.txt konnte nicht gelesen werden" "0 Dateien kopiert".
Zur Sicherheit den vollständigen Pfad angeben ...

Abgesehen davon:
Was soll denn in der Variablen %ThisDir% stehen, bzw wie erhält sie einen Inhalt?
In %LW% steht (siehe Ende der "for-Zeile) bereits der Buchstabe und der Doppelpunkt - Letzterer ist daher in der "xcopy"-Zeile nicht mehr nötig (und "/S" auch nicht, wenn Du ohnehin "/E" verwendest).

Grüße
bastla
Bitte warten ..
Mitglied: everytime420
31.05.2010 um 14:12 Uhr
achso okay danke.
so sieht das ganze jetz aus und läuft

Vielen Dank für eure Hilfe! Besonders an bastla

01.
@echo off & setlocal 
02.
set "GUDL=%temp%\GetUSBDriveLetter.vbs" 
03.
echo Set fso=CreateObject("Scripting.FileSystemObject"):For Each D In fso.Drives:If D.DriveType=2 Then If D.IsReady Then If fso.FileExists(D.DriveLetter^&":\TECHNIK2010.exe") Then WScript.Echo D.DriveLetter:Exit For>"%GUDL%" 
04.
echo Next>>"%GUDL%" 
05.
set LW= 
06.
for /f %%i in ('cscript //nologo "%GUDL%"') do set LW=%%i: 
07.
del "%GUDL%" 
08.
if not defined LW cls & echo Technik2010-Stick leider nicht erkannt! & echo. & pause & goto :eof 
09.
echo Technik2010-Stick ist Laufwerk %LW% 
10.
cd /D %~d0%~p0 
11.
set pfad=%cd% 
12.
xcopy "%pfad%\*.*" %LW%\ /R /Y /H /I /E /V /exclude:nocopy.txt 
13.
echo msgbox"Update wurde eingepielt!",vbExclamation , "Daten kopiert!"> msg.vbs 
14.
msg.vbs 
15.
erase msg.vbs 
16.
exit
Gruß
420
Bitte warten ..
Mitglied: bastla
31.05.2010 um 14:48 Uhr
Hallo 420!

Freut mich, dass es soweit klappt ...

Noch eine Anmerkung: Da Du ja mit temporärem VBS arbeitest, würde es sich anbieten, auch die Fehlermeldung aus Zeile 8 auf diese Weise auszugeben - im einfachsten Fall (ungetestet) etwa so:
01.
@echo off & setlocal 
02.
set "GUDL=%temp%\GetUSBDriveLetter.vbs" 
03.
echo Set fso=CreateObject("Scripting.FileSystemObject"):For Each D In fso.Drives:If D.DriveType=2 Then If D.IsReady Then If fso.FileExists(D.DriveLetter^&":\TECHNIK2010.exe") Then WScript.Echo D.DriveLetter:Exit For>"%GUDL%" 
04.
echo Next>>"%GUDL%" 
05.
set LW= 
06.
for /f %%i in ('cscript //nologo "%GUDL%"') do set LW=%%i: 
07.
del "%GUDL%" 
08.
if not defined LW (set "Info1=Technik2010-Stick leider nicht erkannt!" & set "Info2=Stick nicht erkannt!" & goto :Msg) 
09.
::echo Technik2010-Stick ist Laufwerk %LW% 
10.
cd /D %~d0%~p0 
11.
set pfad=%cd% 
12.
xcopy "%pfad%\*.*" %LW%\ /R /Y /H /I /E /V /exclude:nocopy.txt 
13.
set "Info1=Update wurde eingepielt!" & set "Info2=Daten kopiert!" 
14.
:Msg 
15.
echo msgbox "%Info1%",vbExclamation,"%Info2%"> msg.vbs 
16.
msg.vbs 
17.
erase msg.vbs
Grüße
bastla
Bitte warten ..
Mitglied: everytime420
02.06.2010 um 07:16 Uhr
Ahhh okay noch besser ;)

So hab ich's jetz eingebaut.

Wie würdet Ihr es bereitstellen zum Download für die Kunden ?

Ich hab jetz ein selbstentpackendes Archiv mit WinRar erstellt, damit die Ordnerstuktur nicht verloren geht die die batch ja kopieren soll.
Nur ist das ja manchmal ein Problem wegen Virenscanner und Download bzw. eMail-Versand weil es ja eine .exe ist.

Wisst ihr irgendwelche Alternativen? Hab schon solche .bat to .exe converter ausprobiert aber die ziehen ja auch nicht die Ordner Struktur mit ein.

Gruß
420
Bitte warten ..
Mitglied: everytime420
09.06.2010 um 14:12 Uhr
Hey Leute,

Jetz hab ich noch ein Problem oO

Unsere Aussendienstler haben das Programm auf Ihren Laptops also auf der Festplatte.

Kann ich irgendwie die gleiche batch verwenden für die Suche auf Festplatten und anschließendes kopieren?
Das Problem ist halt dass die "Technik2010.exe" ja nicht direkt auf C:\ beispielsweise liegt sondern irgendwo in einem Unterordner.
Hoffe ihr wisst was ich meine.

Wär echt klasse

Gruß
Bitte warten ..
Mitglied: bastla
09.06.2010 um 15:20 Uhr
Hallo everytime420!

Eigentlich ist das ein organisatorisches Problem - lege den Speicherort verbindlich fest und gut ist ...

Falls es wirklich erforderlich sein sollte, den Ordner zu suchen, sollte ja zumindest das Laufwerk bekannt sein - für LW C: sollte der Pfad dann so zu ermitteln sein:
for /f "delims=" %%i in ('dir /s /b C:\Technik2010.exe') do set "pfad=%%~dpi"
Grüße
bastla
Bitte warten ..
Mitglied: everytime420
11.06.2010 um 11:39 Uhr
Hey bastla!

du hast eigentlich recht ich lass es einfach in "%programfiles%\Technik2010\" installieren, dann dauert es auch nicht solange bis er die .exe gefunden hat.

Aber was mache ich jetzt noch falsch?

01.
::@echo off & setlocal 
02.
 
03.
cd /D %~d0%~p0 
04.
set pfad=%cd% 
05.
 
06.
If Exist %Programfiles%\TECHNIK2010\TECHNIK2010.exe xcopy %pfad%\*.* %Programfiles%\TECHNIK2010\ /R /Y /H /I /E /V (set "Info1=Update wurde eingepielt!" & set "Info2=Daten kopiert!") 
07.
 
08.
if not Exist %Programfiles%\TECHNIK2010\TECHNIK2010.exe (set "Info1=Technik2010-Stick leider nicht erkannt!" & set "Info2=Stick nicht erkannt!") 
09.
 
10.
:Msg 
11.
echo msgbox "%Info1%",vbExclamation,"%Info2%"> msg.vbs 
12.
msg.vbs 
13.
erase msg.vbs
Gruß
420
Bitte warten ..
Mitglied: bastla
11.06.2010 um 12:51 Uhr
Hallo everytinme420!

Um mehrere Anweisungen in einer Zeile zu verwenden, musst Du diese mit "&" (bzw "&&" oder "||") verknüpfen - was Du nach dem "xcopy" in Zeile 6 nicht machst ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Speicherkarten
Tool zum neuformatieren eines USB-Sticks (6)

Frage von flyingKangaroo zum Thema Speicherkarten ...

Heiß diskutierte Inhalte
Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

Exchange Server
DNS Einstellung - zwei feste IPs für Mailserver (15)

Frage von ivan0s zum Thema Exchange Server ...