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

Mit Robocopy aus Batchdatei werden neuerdings Laufwerkfehler angezeigt - warum?

Frage Entwicklung Batch & Shell

Mitglied: red-eye

red-eye (Level 1) - Jetzt verbinden

08.10.2013, aktualisiert 15:04 Uhr, 3621 Aufrufe, 9 Kommentare, 4 Danke

Hallo Administrator.de-Mitglieder,

bislang hatte ich mit zwei Batch-Dateien mit dem Befehl Robocopy ein wichtiges Verzeichnis auf meiner Festplatte mit einem Netzwerkverzeichnis oder mit einem USB-Stick synchronisiert.

Als ich mir vor drei Wochen mit dem brandneuen und noch fehlerhaften Kaspersky 2014 meine Userrechte zerschossen hatte, setzte ich mein Notebook Dell Vostro 3450 (14''-Bildschirm) mit 64-bit und Windows 7 Professional vollkommen neu auf. In den Explorer-Ordneroptionen deaktiviere ich neuerdings das Häkchen für "Leere Laufwerke im Ordner Computer ausblenden. Ich lasse im Navigationsbereich "Alle Ordner anzeigen" und "Automatisch auf aktuellen Ordner erweitern".

Seitdem zeigt mir meine Synchronisations-Batch eine von cmd/win ausgehende Fehlermeldung an: ad9a7b093030d2350bc0c5f0346e6075 - Klicke auf das Bild, um es zu vergrößern

Der folgende Code entspricht der Synchronisation der neueren Dateien von USB-Stick zur Festplatte:
01.
:: Überprüfung der Verzeichnisse 
02.
if exist E:\autorun.inf (set source="E:\ME" & goto var_chk) else (set source=0) 
03.
if exist F:\autorun.inf (set source="G:\ME" & goto var_chk) else (set source=0) 
04.
if exist "C:\Users\USER\Documents\ME" ( 
05.
  set destin="C:\Users\USER\Documents\ME" 
06.
  ) else (set destin=0) 
07.
:var_chk 
08.
if not %source%==0 (goto src_ok) else (goto src_fe) 
09.
:src_ok 
10.
if not %destin%==0 (goto s_d_ok) else (goto dst_fe) 
11.
:src_fe 
12.
if not %destin%==0 (goto dst_ok) else (goto s_d_fe) 
13.
:s_d_ok 
14.
goto rbc_show 
15.
:dst_fe 
16.
echo Ziel nicht vorhanden: Stick nicht eingesteckt oder nicht erkannt! 
17.
goto fehler 
18.
:dst_ok 
19.
echo Quelle nicht vorhanden: Vermutlich falsches Synchronisationsprogramm! 
20.
goto fehler 
21.
:s_d_fe 
22.
echo Quelle und Ziel nicht vorhanden: Vermutlich falsches Synchronisationsprogramm! 
23.
goto fehler 
24.
 
25.
:: Robocopy listet zuerst Unterschiede der Verzeichnisse auf 
26.
:rbc_show 
27.
choice /c jn /t 90 /d n /m "M”chten Sie eine Liste der Unterschiede erhalten? " 
28.
if errorlevel 255 goto fehler 
29.
if errorlevel 2 goto wahl_syn 
30.
if errorlevel 1 goto robo_lst 
31.
if errorlevel 0 goto wahl_syn 
32.
goto fehler 
33.
:robo_lst 
34.
robocopy %source% %destin% /mir /xo /fft /r:3 /w:10 /l 
35.
pause 
36.
 
37.
:: Synchronicity fragt ab, ob die Synchronisation erfolgen soll 
38.
:wahl_syn 
39.
choice /c jn /t 90 /d n /m "Soll nun eine Synchronisation durchgefhrt werden? " 
40.
if errorlevel 255 goto fehler 
41.
if errorlevel 2 goto abbruch 
42.
if errorlevel 1 goto wahl_del 
43.
if errorlevel 0 goto abbruch 
44.
goto fehler 
45.
 
46.
:: Synchronicity fragt, ob die *Extra Dateien auf dem Ziellaufwerk erhalten werden sollen 
47.
:wahl_del 
48.
choice /c jn /t 90 /d j /m "Wollen Sie in Quelle gel”schte Dateien in Ziel behalten? " 
49.
if errorlevel 255 goto fehler 
50.
if errorlevel 2 goto start_dl 
51.
if errorlevel 1 goto start_kp 
52.
if errorlevel 0 goto abbruch 
53.
goto fehler 
54.
 
55.
:: Robocopy kopiert ohne Löschen der *Extra Dateien im Ziellaufwerk 
56.
:start_kp 
57.
robocopy %source% %destin% /e /xo /fft /r:3 /w:10 
58.
goto ende 
59.
 
60.
:: Robocopy kopiert und löscht *Extra Dateien im Ziellaufwerk 
61.
:start_dl 
62.
robocopy %source% %destin% /mir /xo /fft /r:3 /w:10 
63.
goto ende 
64.
 
65.
:: Ende-Prozeduren 
66.
:abbruch 
67.
echo Synchronisation abgebrochen 
68.
goto ende_ 
69.
:fehler 
70.
echo Synchronisation wegen eines Fehlers nicht gestartet, Programm beendet. 
71.
goto ende_ 
72.
:ende 
73.
echo Synchronicity erfolgreich beendet. 
74.
:ende_ 
75.
pause
Ich konnte das Problem jetzt umgehen, indem ich die Laufwerke der Sticks einen Buchstaben hochsetzte. Aber falls die Frage nicht zu trivial ist, oder zu umständlich: Kann mir jemand die Fehlermeldung erklären? Kann ich E: trotzdem durchsuchen lassen, falls mal die Laufwerke anders sortiert oder ein Laufwerk von Windows ausgelassen wird?

Vielen Dank im Voraus fürs Lesen und für jeden Beitrag!

Gruß,
red-eye
Mitglied: Endoro
08.10.2013 um 16:50 Uhr
Hi, ich nehme an, du suchst den Laufwerksbuchstaben für den Stick?
Das könnte so gehen:
01.
for /f "tokens=2delims==" %%a in ('wmic volume where "drivetype=2" get name /format:list^|find "="') do set "source=%%a" 
02.
echo %source%
lg.
Bitte warten ..
Mitglied: red-eye
08.10.2013, aktualisiert um 20:06 Uhr
Hallo Endoro!

Ja, im Grunde ist es das. Vielen Dank für Deinen interessanten Code! Könntest Du mir noch ein wenig detaillierter erklären, was Dein komplizierter Befehl alles beinhaltet?

- Was bedeutet "tokens=2delims==", was "%%a", was ist "'wmic volume where "drivetype=2" get name"?
- Was sind das für interessante Formatierungsbefehle: "/format:list^|find "=""?

Schau mal, das Problem bleibt dasselbe! E: ist bei mir offensichtlich ein SD-Karten-Laufwerk, derzeit leer. G: (Verbatim) ist der Stick.
6782aeb340d9528807451b028715b159 - Klicke auf das Bild, um es zu vergrößern
b37241442a383ebcd583e3136e384cc1 - Klicke auf das Bild, um es zu vergrößern

Mit freundlichen Grüßen,
red-eye
Bitte warten ..
Mitglied: pieh-ejdsch
08.10.2013, aktualisiert um 21:21 Uhr
Moin red-eye,

Die Fehler-MessageBox erscheint, weil der Befehlsinterpreter vor dem Zugriff auf das Laufwerk nicht auf ein Vorhandenes gültiges eingebundenes Medium (Volume) prüft.
Eine ExistensPrüfung mit if grätscht da leider genauso wie die Erweiterungen von ForVariablen und Batchparametern.
Eine Prüfung auf ein eingebundenes Medium (E: ) erfolgt in der CMD-Line mit
vol E: >nul 2>nul && echo Laufwerk E: ist online 
 
for /f "delims=\ " %v in ('mountvol ^|find ":\"^|sort') do @vol %v >nul 2>nul&&echo Laufwerk %v mit Medium
Oder, was in Deinem Fall mit DIR direkt mit Autorun.inf
dir E:\autorun.inf >nul &&echo USB Stick ist E: 
 
for /f "tokens=2delims==\" %v in ('wmic volume where "drivetype=2" get name /format:list^|find "="') do @dir %v\Autoupdateslog.txt >nul 2>nul &&echo USB Stick ist %v
Warum machst Du diese Überprüfungen am Anfang nur halb und doppelt? Etwas chronologisch wäre es in etwa so:
01.
:: Überprüfung der Verzeichnisse 
02.
 rem etwas einfacher Gestaltet 
03.
set "source=" 
04.
set "destin=" 
05.
set "USBpaht=" 
06.
for /f "tokens=2delims==\" %%v in ('wmic volume where "drivetype=2" get name /format:list^|find "="') do vol %v >nul 2>nul &&call set "USBpaht=%%USBpath%%%v\;" 
07.
 rem Suche nach autorun.inf 
08.
for %%i in (autorun.inf) do ( 
09.
 if %%~d$USBpath:i equ E: set source="%%~d$USBpath:i\ME" 
10.
 rem warum hier eigentlich LW G:? 
11.
 if %%~d$USBpath:i equ F: set source="G:\ME" 
12.
13.
if exist "C:\Users\USER\Documents\ME" set destin="C:\Users\USER\Documents\ME" 
14.
 rem prüfe parameter var_chk 
15.
if not defined source if not defined destin (goto s_d_fe) else goto s_fe 
16.
if defined destin goto rbc_show 
17.
 rem :dst_fe 
18.
echo Ziel nicht vorhanden: Stick nicht eingesteckt oder nicht erkannt! 
19.
goto fehler 
20.
:s_fe 
21.
echo Quelle nicht vorhanden: Vermutlich falsches Synchronisationsprogramm! 
22.
goto fehler 
23.
:s_d_fe 
24.
echo Quelle und Ziel nicht vorhanden: Vermutlich falsches Synchronisationsprogramm! 
25.
goto fehler 
26.
 
27.
:: Robocopy listet zuerst Unterschiede der Verzeichnisse auf 
28.
:rbc_show 
29.
 rem hier gehts weiter
Gruß Phil
Bitte warten ..
Mitglied: red-eye
08.10.2013 um 21:59 Uhr
Hi Phil,
vielen Dank schon Mal! Ich werde mir das in Ruhe alles ansehen und testen!

Gruß, red-eye
Bitte warten ..
Mitglied: Endoro
09.10.2013 um 01:14 Uhr
Hi,
man kann- mit ordentlichem Aufwand- Windows überreden, ausgehend von "Verbatim" das logische Laufwerk auszugeben:
01.
@ECHO OFF &SETLOCAL 
02.
for /f "delims=" %%a in ('wmic path win32_diskdrive where 'model like "%%Verbatim%%"' get deviceid /value') do ( 
03.
	for /f "tokens=2delims==" %%b in ("%%~a") do set "diskdrive=%%b" 
04.
05.
for /f tokens^=7delims^=^" %%a in ('wmic path win32_diskdrivetodiskpartition get /FORMAT:CSV ^| FIND "%diskdrive%"') do set "partition=%%a" 
06.
for /f tokens^=7delims^=^" %%a in ('wmic path win32_logicaldisktopartition get /FORMAT:CSV ^| FIND "%partition%"') do set "drive=%%a" 
07.
echo %drive%
Wenn mehrere Verbatim-Laufwerke angeschlossen sind, würde ich über label eindeutige Namen vergeben und die mit vol abfragen.
lg.
Bitte warten ..
Mitglied: red-eye
09.10.2013, aktualisiert um 02:17 Uhr
Hallo Endoro, hallo Phil!

Endoro, vielen Dank für Deine neuen Ideen! Ich bin allerdings noch zu Fuß dabei, Deine und Phils Code-Vorschläge zu verstehen. Bin leider nicht ganz so firm, wie Ihr Experten. Könntest Du mir dabei nochmals helfen?

- Warum wählst Du tokens^=7
- Ich verstehe einfach nicht, was ein Token ist ...
- Was sind in der Hilfe für FOR eigentlich die umgekehrten Anführungszeichen und Anführungszeichen?


Ich möchte nun gerne noch wiedergeben, was ein Test Eurer Vorschläge für die Laufwerkerkennung ergab:

1. Endoros erster Vorschlag:
01.
C:\Windows\system32>for /F "tokens=2delims==" %a in ('wmic volume where "drivetype=2" get name /format:list|find "="') do set "source=%a" 
02.
" \Windows\system32>set "source=G:\ 
03.
" \Windows\system32>set "source=E:\ 
04.
 
05.
C:\Windows\system32>echo Source ist E:\ 
06.
Source ist E:\ 
07.
 
08.
C:\Windows\system32>if exist E:\autorun.inf (echo Source ist E:\ und ist Stick) else (if not exist E:\autorun.inf echo Source ist E:\, aber nicht Stick ...) 
09.
Source ist E:\, aber nicht Stick ...
2. Phils Vorschlag:
01.
C:\Windows\system32>set source=   && set destin=   && set usbpath=   && echo Source , Destin , USB-Path 
02.
Source , Destin , USB-Path 
03.
 
04.
C:\Windows\system32>for /F "tokens=2delims==\" %v in ('wmic volume where "drivetype=2" get name /format:list|find "="') do vol  %v\;" 
05.
 
06.
C:\Windows\system32>vol  G:\;" 
07.
 
08.
Das System kann das angegebene Laufwerk nicht finden. 
09.
Folgender Fehler trat auf: G:\. 
10.
Volume in Laufwerk C: hat keine Bezeichnung. 
11.
Volumeseriennummer: 1C5B-5695 
12.
 
13.
C:\Windows\system32>vol  E:\;" 
14.
 
15.
Das System kann das angegebene Laufwerk nicht finden. 
16.
Folgender Fehler trat auf: E:\. 
17.
Volume in Laufwerk C: hat keine Bezeichnung. 
18.
Volumeseriennummer: 1C5B-5695 
19.
 
20.
C:\Windows\system32>echo Source  , Destin  , USB-Path 
21.
Source  , Destin  , USB-Path
Es gibt offenbar mehrere Wege, ein Laufwerk, bzw. einen USB-Stick am USB-Anschluß zu erkennen. Meiner lief ursprünglich darauf hinaus, dasjenige Laufwerk als USB-Stick zu definieren, welches eine Datei autorun.inf im Stammverzeichnis enthält. Bei der Suche danach trat aber wegen des leeren, dennoch vorhandenen SD-Karten-Verzeichnisses die oben dargestellte Fehlermeldung auf.

Wenn ich Euch richtig verstehe, dann sucht Ihr mit einem Systembefehl nach vorhandenen Laufwerken, in der Hoffnung, daß die Fehlermeldung nicht aufkommt. Bei Endoros erstem Lösungsversuch geschah das leider trotzdem. Bei Phils Vorschlag entsteht leider ein anderer Fehler. Endoros zweiter Vorschlag könnte scheitern, sobald ich einmal einen anderen als den Verbatim-Stick verwenden würde. Dennoch vielen Dank für Eure interessanten Code-Stücke, aus denen ich wieder eine Menge lernen und nachmachen kann!

Eine Lösung könnte der Code mit der Laufwerkssuche mit vol >nul darstellen. Er erzeugt diese oben dargestellte Messagebox nicht. Aber auch dazu wieder eine Frage:

- Was bedeutet dieser Befehl?
- Und vor allem, was bedeutet >nul, und wozu noch 2>nul?


Bitte seid so freundlich, und geht ersteinmal noch auf meine Fragen ein, bevor Ihr die nächsten brillianten Codes vorschlagt, die ich aber nicht richtig verstehen kann!

Herzliche und dankbare Grüße von
Red-eye
Bitte warten ..
Mitglied: red-eye
09.10.2013, aktualisiert um 04:01 Uhr
Zuletzt noch der Test mit dem Befehl mit vol und >nul, der USB-Stick ist an Laufwerk G:.

Code:
01.
set hdpath= && set usbpath= && set usbdrive= && set source= && set destin= 
02.
set hdpath=\Users\USER\Documents\ME 
03.
set usbpath=\ME 
04.
vol E: >nul 2>nul && set usbdrive=E: 
05.
vol F: >nul 2>nul && set usbdrive=F: 
06.
vol G: >nul 2>nul && set usbdrive=G: 
07.
vol H: >nul 2>nul && set usbdrive=H: 
08.
vol I: >nul 2>nul && set usbdrive=I: 
09.
vol J: >nul 2>nul && set usbdrive=J: 
10.
if exist %usbdrive%\autorun.inf (set source=%usbdrive%%usbpath%) else (set source=0) 
11.
echo Source ist %source%
Ergebnis:
01.
C:\Windows\system32>set hdpath=   && set usbpath=   && set usbdrive=   && set source=   && set destin= 
02.
C:\Windows\system32>set hdpath=\Users\USER\Documents\ME 
03.
C:\Windows\system32>set usbpath=\ME 
04.
C:\Windows\system32>vol E:   1>nul 2>nul  && set usbdrive=E: 
05.
C:\Windows\system32>vol F:   1>nul 2>nul  && set usbdrive=F: 
06.
C:\Windows\system32>vol G:   1>nul 2>nul  && set usbdrive=G: 
07.
C:\Windows\system32>vol H:   1>nul 2>nul  && set usbdrive=H: 
08.
C:\Windows\system32>vol I:   1>nul 2>nul  && set usbdrive=I: 
09.
C:\Windows\system32>vol J:   1>nul 2>nul  && set usbdrive=J: 
10.
C:\Windows\system32>if exist G:\autorun.inf (set source=G:\ME )  else (set source=0 ) 
11.
C:\Windows\system32>echo Source ist G:\ME 
12.
Source ist G:\ME
Bitte warten ..
Mitglied: pieh-ejdsch
09.10.2013, aktualisiert 10.10.2013
Moin red-eye,
Wenn ich Euch richtig verstehe, dann sucht Ihr mit einem Systembefehl nach vorhandenen Laufwerken, in der Hoffnung, daß die Fehlermeldung nicht aufkommt. Bei Endoros erstem Lösungsversuch geschah das leider trotzdem. Bei Phils Vorschlag entsteht leider ein anderer Fehler.
Nein - der Befehl vol oder der Befehl dir verhindern das Auftreten der Fehlermeldung mittels Messagebox, was aber mit der Standardfehlerausgabe (Handle 2) der CMD-Line nichts zu tun hat.

mountvol listet nur die lokal eingebundenen Laufwerke auf, wmic nur die USB Laufwerke, anstatt eine Liste von A-Z durchzugehen wird schon ausgefiltert.
Dein Test in Zeile 4
01.
C:\Windows\system32>for /F "tokens=2delims==\" %v in ('wmic volume where "drivetype=2" get name /format:list|find "="') do vol  %v\;" 
hast Du etwas falsch übernommen ->> copy paste Fehler?
01.
for /f "tokens=2delims==\" %%v in ('wmic volume where "drivetype=2" get name /format:list^|find "="') do vol %v >nul 2>nul &&call set "USBpaht=%%USBpath%%%v\;"
Es sollte sicher so aussehen:
01.
for /f "tokens=2delims==\" %%v in ('wmic volume where "drivetype=2" get name /format:list^|find "="') do vol %v
Die Ausgabe des Verwaltungintrumentes (wmic) wird in der Forschleife mit "tokens=2" dazu angewisen das zweite vorkommen inerhalb des/der delimiter(s) "=\" "delims==\" in der Variable %v auszugeben.
Der Befehl Vol erwartet nur eine Laufwerksbezeichnung gefolgt von einen Doppelpunkt, sonst nichts. wird etwas anderes Hinzugefügt interpretiert die CommanLine dies als keine Eingabe, da diese Syntax nicht erwartet wird. Also wird laut vol /? das Aktuelle Laufwerk angezeigt.

Theoretisch würde es auch so etwas umständlich wen der VolumeName des Laufwerkes VERBATIM16 ist, gehen:
01.
for %L 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 vol %L: 2>nul |findstr /ec": ist VERBATIM16" >nul &&set "LW=%L:"
In einer Autorun.inf kannst Du auch noch ganz speziell ein Label vergeben und nach einer gewissen Zeichenfolge suchen. Der Möglichkeiten gibt es noch viele mehr
um einen Bestimmten Datenträger ausfindig zu machen; siehe: @Endoro

So ganz nebenbei: Von wo aus wird denn das Backkup angestossen?

@Friemler hat unter Wissen ein schönes For-Tutorial verfasst.
vol D: >nul 2>nul &&echo Laufwerk D: ist vorhanden ||echo Laufwerk D: ist ohne Medium
da die Befehlsverknüpfung && den Folgenden Befehl nur ausführt, wenn der vorige Erfolgreich war, sowie die Verknüpfung || nur bei Misserfolg des vorigen Befehls den folgenden ausführt, benötige ich die Ausgabe des ersten Befehls nicht. Der UmleitungsPfeil leitet erst die Standardauseingabe (Handle 1) ins "nichts" und die Fehlerausgabe (Handle 2) wird auch dahin geschickt.

In der Befehlszeilenreferenz kannst Du Dir die Erklärungen genauer durchlesen.

Gruß Phil
Bitte warten ..
Mitglied: red-eye
09.10.2013 um 22:29 Uhr
Hallo Phil,

vielen Dank für Deine erneute Antwort und für die vielen Erklärungen! Ich lese so nach und nach in der Wissenswelt bei Administrator.de, insbesondere gehe ich Deinen Empfehlungen zur Erklärung der FOR-Schleife nach. (Ist allerdings viel Lese- und Versteh-Stoff, ich bin noch lange nicht durch.)

Zitat
Dein Test in Zeile 4 ... hast Du etwas falsch übernommen ->> copy paste Fehler?
Das ist gut möglich, da ich mich mit der Syntax dieser komplizierten Befehle überhaupt nicht auskenne. Ich habe nun also, ohne wirklich zu wissen, welche Zeichen nötig sind, anhand der von cmd.exe ausgelieferten Ergebnisse etwas experimentiert.

Mit Endoros Vorschlag werden die Laufwerke durchgetestet. Probleme bei seinem Vorschlag waren, daß der Backslash mitgeliefert wurde, und daß die Laufwerke zwar gefunden, aber nicht überprüft wurden. Den Backslash habe ich entfernt, damit entsteht folgendes Ergebnis:
01.
C:\Windows\system32>set hdpath= && set usbpath= && set usbdrive= && set source= && set destin= 
02.
C:\Windows\system32>set hdpath=\Users\USER\Documents\ME && set usbpath=\ME 
03.
C:\Windows\system32>for /F "tokens=2delims==\" %a in ('wmic volume where "drivetype=2" get name /format:list|find "="') do set usbdrive=%a 
04.
C:\Windows\system32>set usbdrive=G: 
05.
C:\Windows\system32>set usbdrive=F: 
06.
C:\Windows\system32>set usbdrive=E: 
07.
C:\Windows\system32>if exist E:\autorun.inf (set source=E:\ME ) else (set source=0 ) 
08.
C:\Windows\system32>echo Source 0 
09.
Source 0
Dann der Vorschlag von Phil, ich habe ihn jetzt durch einiges Ausprobieren korrigiert. Er zählt die Laufwerke rückwärts durch, überprüft sie und findet das kleinste aktive Laufwerk. Durch die Übergabe des Fehlercodes an nul bleibt nun auch die ursprüngliche störende Fehler-Messagebox aus:
01.
C:\Windows\system32>set hdpath= && set usbpath= && set usbdrive= && set source= && set destin= 
02.
C:\Windows\system32>set hdpath=\Users\USER\Documents\ME && set usbpath=\ME 
03.
C:\Windows\system32>for /F "tokens=2delims==\" %v in ('wmic volume where "drivetype=2" get name /format:list|find "="') do vol %v 1>nul 2>nul && set usbdrive=%v 
04.
C:\Windows\system32>vol G: 1>nul 2>nul && set usbdrive=G: 
05.
C:\Windows\system32>vol F: 1>nul 2>nul && set usbdrive=F: 
06.
C:\Windows\system32>vol E: 1>nul 2>nul && set usbdrive=E: 
07.
C:\Windows\system32>if exist F:\autorun.inf (set source=F:\ME ) else (set source=0 ) 
08.
C:\Windows\system32>echo Source F:\ME 
09.
Source F:\ME
Der entscheidende Punkt, der meine Synchronisations-Batch nun wieder funktionstüchtig macht, ist tatsächlich die Ermittlung des Laufwerks mit Übergabe des Fehlers (Handle 2) an nul. Hiermit kann ich dann sogar auch mit meinen etwas einfacheren Bordmitteln die Laufwerke rückwärts zählen und das unterste aktive Laufwerk ermitteln. Ich habe ja insgesamt vier USB-Buchsen, theoretisch könnten sie alle belegt sein, aber sinnvoll ist die Auswahl des untersten aktiven USB-Laufwerks. Offenbar zählt der Befehl vol das CD-Laufwerk und die Festplatte nicht mit. Dann entsteht folgender Code:
01.
C:\Windows\system32>set hdpath= && set usbpath= && set usbdrive= && set source= && set destin= 
02.
C:\Windows\system32>set hdpath=\Users\USER\Documents\ME && set usbpath=\ME 
03.
C:\Windows\system32>vol J: 1>nul 2>nul && set usbdrive=J: && vol I: 1>nul 2>nul && set usbdrive=I: && vol H: 1>nul 2>nul && set usbdrive=H: 
04.
C:\Windows\system32>vol G: 1>nul 2>nul && set usbdrive=G: && vol F: 1>nul 2>nul && set usbdrive=F: && vol E: 1>nul 2>nul && set usbdrive=E: 
05.
C:\Windows\system32>if exist F:\autorun.inf (set source=F:\ME ) else (set source=0 ) 
06.
C:\Windows\system32>echo Source F:\ME 
07.
Source F:\ME
Ich denke, damit sind mein Problem gelöst und meine Frage nach den Ursachen beantwortet. Ich werde die Frage als gelöst setzen.

Vielen Dank an Endoro und Phil!
red-eye
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Server
IP-Einstellungen werden falsch angezeigt (5)

Frage von schlumpf90 zum Thema Windows Server ...

Verschlüsselung & Zertifikate
gelöst Revocation Server innerhalb der PKI wird als offline angezeigt (1)

Frage von Snipes zum Thema Verschlüsselung & Zertifikate ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...