Batch Script, prüfen ob Laufwerk existiert.
Hi,
ich will ein kleines Batch script schreiben, dass mir Bilder von meinem Cardreader in einen Bestimmten Ordner kopiert.
Das kopieren klappt wunderbar, nur mein Cardreader hat 4 Laufwerke, und ich werde verschiedene Arten von Karten haben, und will nur ein Script dafür haben, weil meine Mutter das bedienen soll
.
Also habe ich mir gedacht, mache ich einen Laufwerkscheck.
if exists X:\ erkennt das ganze zwar wunderbar, aber bei den Laufwerken, in denen keine Karte steckt kommt eine Störende Fehlermeldung, dass kein Datenträger eingelgt wurde.
Daher bin ich hingegangen und wollte mit fsutil fsinfo volumeinfo X:\ prüfen ob das Laufwerk existiert.
Hier ist nun das Problem, wenn ich mit %%g ausgeben lasse, steht dort
Fehler: bei den Laufwerken wo keine Karte drinsteckt, und Volumname und noch ein paar sachen bei denen in denen eine Karte steckt. Aber wenn ich if %%g=="Volumname" kommt als ergebnis immer false raus.
und wenn ich if %%g NEQ "Fehler:" mache kommt immer true...
Ich hoffe mir kann dabei einer helfen...
ich will ein kleines Batch script schreiben, dass mir Bilder von meinem Cardreader in einen Bestimmten Ordner kopiert.
Das kopieren klappt wunderbar, nur mein Cardreader hat 4 Laufwerke, und ich werde verschiedene Arten von Karten haben, und will nur ein Script dafür haben, weil meine Mutter das bedienen soll
.Also habe ich mir gedacht, mache ich einen Laufwerkscheck.
if exists X:\ erkennt das ganze zwar wunderbar, aber bei den Laufwerken, in denen keine Karte steckt kommt eine Störende Fehlermeldung, dass kein Datenträger eingelgt wurde.
Daher bin ich hingegangen und wollte mit fsutil fsinfo volumeinfo X:\ prüfen ob das Laufwerk existiert.
Hier ist nun das Problem, wenn ich mit %%g ausgeben lasse, steht dort
Fehler: bei den Laufwerken wo keine Karte drinsteckt, und Volumname und noch ein paar sachen bei denen in denen eine Karte steckt. Aber wenn ich if %%g=="Volumname" kommt als ergebnis immer false raus.
und wenn ich if %%g NEQ "Fehler:" mache kommt immer true...
Ich hoffe mir kann dabei einer helfen...
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
@echo off
set Ziel=I:\test
FOR /D %%d IN (J:\ L:\ M:\ N:\) DO (
FOR /F %%g IN ('fsutil fsinfo volumeinfo %%d') DO (
if %%g NEQ "Fehler:" (
call:bildercopy %%d
goto eof
)
)
)
goto error1
:bildercopy
dir %1
goto eof
goto eof
:error1
echo Chipkarte ist nicht richtig eingesteckt!
pause
goto eof
:eof
|
Über mich: www.heinervdm.de
Persönlich Mitteilungen an mich bitte als PN (nicht Email) hier im Forum. ICQ und Skype bitte nur in Notfällen.
Persönlich Mitteilungen an mich bitte als PN (nicht Email) hier im Forum. ICQ und Skype bitte nur in Notfällen.
Ist zwar schon lange her aber ich denke es gibt doch sowas wie "if exist". Einfach die möglichen Laufwerksbuchstaben durchgehen und schauen ob ein .*jpg darin zu finden ist.
mfg apple
mfg apple
Zur Unterhaltung einer Party trägt niemand so viel bei wie diejenigen, die gar nicht da sind.
Audrey Hepburn, Schauspielerin
Don't use thx-sry-plz
Audrey Hepburn, Schauspielerin
Don't use thx-sry-plz
mal so eine idee:
schon gedacht an ein mini-"programm"(c,c++,java,..), das versucht auf dem jeweiligen laufwerk eine datei zu speichern und anschließend gleich löscht.. und falls das nicht erfolgreich gemacht werden kann, dann ist keine karte drinnen oder halt falsch eingelegt..
lg ,asterix
schon gedacht an ein mini-"programm"(c,c++,java,..), das versucht auf dem jeweiligen laufwerk eine datei zu speichern und anschließend gleich löscht.. und falls das nicht erfolgreich gemacht werden kann, dann ist keine karte drinnen oder halt falsch eingelegt..

lg ,asterix
gawk; talk; time; grep; cd ~; wine; talk; touch; unzip; touch; strip; gasp; finger; gasp; mount; fsck; more; yes; gasp; umount; make clean; sleep
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »asterix« (8. August 2006, 15:37)
Probier mal:
Gruss
Marty
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
@echo off
set Ziel=I:\test
FOR /D %%d IN (J:\ L:\ M:\ N:\) DO (
FOR /F %%g IN ('fsutil file createnew %%dlabel.xxx 100') DO (
if %%g == Die (
del %%dlabel.xxx
call:bildercopy %%d
goto eof
)
)
)
goto error1
:bildercopy
dir %1
goto eof
goto eof
:error1
echo Chipkarte ist nicht richtig eingesteckt!
pause
goto eof
:eof
|
Gruss
Marty
Edit: gelöst, ergebnis siehe unten.
@apple Da hab ich doch geschreiben, dass das funktioniert, nur kommt da ne Fehlermeldung, die ich nicht haben will, bei den restlichen 3 Laufwerken
@marty
bei deiner Version kommt die selbe Fehlermeldung, wie bei if exist X:\
@all
Ich habs jetzt folgendermaßen gemacht, nur habe ich jetzt dass Problem, dass mein Code zum kopieren nicht mehr geht...
Das neue Verzeichnis wird noch erstellt, aber keine datei mehr kopiert...
Sieht da vieleicht jemand nen Fehler? ansonsten muss ich vieleicht doch ein C Programm dafür schreiben...
Die Ausgabe sieht nun folgendermaßen aus:
Für mich sieht das so aus, als ob das %Drive% in der forschleife nicht richtig funktioniert...
mit %%d in der for schleife wollte das script garnicht laufen...
Lösung
Die Lösung war jetzt, das kopieren in eine Unterfunktion zu packen, jetzt gehts...
Also Batch Programmierung versteh ich nicht so wirklich...
Shell scripting für Linux mag ich da doch wesentlich lieber...
@apple Da hab ich doch geschreiben, dass das funktioniert, nur kommt da ne Fehlermeldung, die ich nicht haben will, bei den restlichen 3 Laufwerken

@marty
bei deiner Version kommt die selbe Fehlermeldung, wie bei if exist X:\
@all
Ich habs jetzt folgendermaßen gemacht, nur habe ich jetzt dass Problem, dass mein Code zum kopieren nicht mehr geht...
Das neue Verzeichnis wird noch erstellt, aber keine datei mehr kopiert...
Sieht da vieleicht jemand nen Fehler? ansonsten muss ich vieleicht doch ein C Programm dafür schreiben...
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
@echo off
set Ziel=I:\test
FOR /D %%d IN (J: L: M: N:) DO (
@fsutil fsinfo volumeinfo %%d
if not errorlevel 1 (
echo Karte gefunden in Laufwerk %%d
set /A N = 1
set Drive = %%d
:loop2
if not exist %Ziel%\%N% (
md %Ziel%\%N%
for /R %Drive% %%f in (*.*) do (
xcopy %Drive%\%%f %Ziel%\%N%
del %Drive%\%%f
)
goto eof
)
set /A N += 1
goto loop2
)
)
goto error1
:error1
echo Chipkarte ist nicht richtig eingesteckt!
pause
goto eof
:eof
|
Die Ausgabe sieht nun folgendermaßen aus:
Zitat
I:\test>test.bat
Fehler: Das Gerät ist nicht bereit.
Volumename :
Volumeseriellennummer : 0x65b10ef
Maximale Komponentenlänge : 255
Dateisystemname : FAT
Behält die Groß-/Kleinschreibung von Dateinamen
Unterstützt Unicode-Dateinamen
Karte gefunden in Laufwerk L:
I:\test\Autorun.inf
Das System kann das angegebene Laufwerk nicht finden.
I:\test\Kopie von test.bat
Das System kann das angegebene Laufwerk nicht finden.
I:\test\start.bat
Das System kann das angegebene Laufwerk nicht finden.
I:\test\test.bat
Das System kann das angegebene Laufwerk nicht finden.
Für mich sieht das so aus, als ob das %Drive% in der forschleife nicht richtig funktioniert...
mit %%d in der for schleife wollte das script garnicht laufen...
Lösung
Die Lösung war jetzt, das kopieren in eine Unterfunktion zu packen, jetzt gehts...
Also Batch Programmierung versteh ich nicht so wirklich...
Shell scripting für Linux mag ich da doch wesentlich lieber...
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
@echo off
set Ziel=I:\test
FOR /D %%d IN (J: L: M: N:) DO (
@fsutil fsinfo volumeinfo %%d
if not errorlevel 1 (
echo Karte gefunden in Laufwerk %%d
call:bildercopy %%d
goto eof
)
)
goto error1
:bildercopy
set /A N = 1
:loop2
if not exist %Ziel%\%N% (
md %Ziel%\%N%
for /R %1 %%f in (*.jpg) do (
xcopy %%f %Ziel%\%N%
del %%f
)
goto eof
)
set /A N += 1
goto loop2
goto eof
:error1
echo Chipkarte ist nicht richtig eingesteckt!
pause
goto eof
:eof
|


