peterpan33
Goto Top

Mit SET unterschiedliche Laufwerke einer Variablen zuweisen

Hallo,
ich habe noch eine Frage zu folgendem schon besprochenen Problem. Ich würde gerne einer Variablen unterschiedliche Laufwerksbuchstaben zuweisen. Mein Code sieht wie folgt aus:
SET "Laufwerk1=F:\*.JPG"  
DIR /s /b /a-d "%Laufwerk1%">NUL 2>&1 && GOTO :PROGRAMM   
...
nun müsste ich aber mehrere Laufwerke dieser einen Variablen zuweisen. Also:
SET "Laufwerk1=F:\*.JPG"  
SET "Laufwerk1=E:\*.JPG"  
SET "Laufwerk1=G:\*.JPG"  
DIR /s /b /a-d "%Laufwerk1%">NUL 2>&1 && GOTO :PROGRAMM   
...
Leider funktioniert das ja so nicht. Gibt es einen Möglichkeit genau einer Variablen mehrere Laufwerke zuzuweisen?
Noch eine Zusatzfrage. Wie kann ich allen SD Karte immer ein festes Laufwerk zuweisen? (WIN XP)
Vielen Dank für Tips und Hilfen lieben Gruß
Peter

Content-ID: 143904

Url: https://administrator.de/forum/mit-set-unterschiedliche-laufwerke-einer-variablen-zuweisen-143904.html

Ausgedruckt am: 23.12.2024 um 13:12 Uhr

bastla
bastla 31.05.2010 um 21:31:21 Uhr
Goto Top
Hallo peterpan33!

Die Variable, die sich hier anbietet, wäre die Schleifenvariable einer "for""-Schleife, also etwa:
@echo off & setlocal
for %%i in (F E G) do (
    dir /s /b /a-d "%%i:\*.jpg">nul 2>&1 && call :Programm "%%i"  
)
:: was danach noch so anliegt
goto :eof

:Programm
echo Unterprogramm wurde aufgerufen für Laufwerk %1
:: was hier zu tun ist
goto :eof
Grüße
bastla
Biber
Biber 31.05.2010 um 21:51:40 Uhr
Goto Top
Moin peterpan33,

hmmm, ich interpretiere den Hintergrund deiner Frage ein bissle anders bastla und denke, du willst auf unterschiedlichen Rechnern immer den gleichen Laufwerksbuchstaben für deinen Stick/deine SD vorgeben.
In diesem Fall musst du natürlich nicht (und genau genommen solltest du es auch nicht) jeweils mit einer FOR-Anweisung über 3 mögliche Laufwerksbuchstaben humpeln.

Also. sollte das Abarbeiten ALLER Lw-Buchstaben F, E, G mit dem DIR-befehl gemeint sein und die Gleichbehandlung aller *jpg-Dateien 8egal ob auf E oder F oder G gefunden:
--> dann einfach direkt in den DIR-Befehl als Parameter übergeben (CMD-Promp-Beispiel:]
  FOR /F "delims=" %i in ('dir /s /b /a-d "E:\*.jpg F:\*.JPG G:\*jpg" ) do WasImmerZuTunIst "%i"

Für die "feste Vergabe eines Laufwerksbuchstabens" genau diesen Suchbegriff in unsere Forumssuchfunktion eintippseln.
Oder "Uwe Sieber" in eine Suchmaschine.

Grüße
Biber
peterpan33
peterpan33 31.05.2010 um 22:18:03 Uhr
Goto Top
Hi ho,
ohh das ist super und funktioniert auch. Mit welcher Variablen würde ich dann weiter arbeiten in meinem Programm, wenn ich wieder einen for schleife habe mit dem move befehl:

:NEU
For %%A IN (F E G) DO (DIR /s /b /a-d "%%A:\*.JPG">NUL 2>&1 && CALL :PROGRAMM "%%A"  
ping 0.0.0.0 -n 5 >NUL
GOTO NEU
:Programm
FOR /f "delims=" %%I IN ('DIR /s /b /a-d "%VARIABLE%" 2^>NUL') DO MOVE "%%I" . >NUL 2>NUL  

also %VARIABLE% muss ja jetzt ersetzt werden.
Vielen Dank und Gruß
bastla
bastla 31.05.2010 um 22:31:15 Uhr
Goto Top
Hallo peterpan33!

Wenn es nur ein simples "move" aller ".jpg"-Dateien werden soll, würde ich ohnehin Bibers Vorschlag (und der kommt ganz ohne Unterprogramm aus) empfehlen ...

... ansonsten kommt im Unterprogramm ":Programm" der Laufwerksbuchstabe als %1 an (sollte mein Beispiel von oben eigentlich zeigen) - daher müsste die Zeile etwa so aussehen:
FOR /f "delims=" %%I IN ('DIR /s /b /a-d "%1:\*.jpg" 2^>NUL') DO MOVE "%%I" >NUL 2>&1
Auch diese Variante verlangt nicht zwingend nach einem Unterprogramm - letzteres ist eigentlich nur sinnvoll, wenn mehrere Aktionen je Laufwerk auszuführen wären oder mit Variablen (etwa für Dateinamen) hantiert werden müsste ...

Grüße
bastla
peterpan33
peterpan33 31.05.2010 um 22:38:08 Uhr
Goto Top
hmpf,
klappt leider doch nicht ;-(. Also Ziel ist es SD Karten abzusuchen, wenn diese in den Computer (SD- Schacht) eingeführt werden. Also soll die Batch-Datei die ganze Zeit auf E F G usw. nachsehen ob er ein JPG da ist ( auch in den unterverzeichnissen ) und wenn er was findet zum :PROGRAMM gehen.
Dort ist der erste Schritt: Verschiebe die auf der SD-Karte gefunden Bilder in das aktuelle Verzeichnis.

So das funktioniert bei mir auch schon ganz gut, für einen Laufwerksbuchstaben, wie oben gezeigt. Leider sind manche SD Karten mit unterschiedlichen Laufwerksbuchstaben versehen. Deshalb wollte ich ursprünglich meine Variablen mehrere Laufwerke zuordnen.
Da komm ich gerade nicht weiter.
Vielen Dank und besten Gruß
90776
90776 31.05.2010 um 23:56:19 Uhr
Goto Top
SD kartenschacht kannst du unter Computerverwaltung, Datenträgerverwaltung einen Allgemeinen Laufwerksbuchstaben zuordnen

Links steht sowas wie:
Datenträger 1
Wechselmedium
Kein Medium

Dort rechtsklick und Laufwerksbuchstabe ändern

Wenn keine SD karte eingelegt ist, siehst den Schacht unter Arbeitsplatz auch nicht.

Gruss
Switcher
peterpan33
peterpan33 01.06.2010 um 00:43:19 Uhr
Goto Top
@10750,
leider findet er unter WIN XP kein SD-Karten Laufwerk unter der Datenträgerverwaltung. Sonst würde ich ihm dort den Laufwerksbuchstaben zuweisen. Besten Gruß
peterpan33
peterpan33 01.06.2010 um 01:25:34 Uhr
Goto Top
So gehts aber schön ist das nicht:
SET "SDKarte1=E\*.JPG"  
SET "SDKarte2=F\*.JPG"  
SET "SDKarte3=G\*.JPG"  
SET "SDKarte4=H\*.JPG"  

:NEU
DIR /s /b /a-d "%SDKarte1%">NUL 2>&1 && GOTO :PROGRAMM1   
DIR /s /b /a-d "%SDKarte2%">NUL 2>&1 && GOTO :PROGRAMM2  
DIR /s /b /a-d "%SDKarte3%">NUL 2>&1 && GOTO :PROGRAMM3   
DIR /s /b /a-d "%SDKarte4%">NUL 2>&1 && GOTO :PROGRAMM4    
ping 0.0.0.0 -n 5 >NUL
GOTO NEU

:PROGRAMM1
FOR /f "delims=" %%I IN ('DIR /s /b /a-d "%SDKarte1%" 2^>NUL') DO MOVE "%%I" . >NUL 2>NUL  
GOTO PROGRAMM
:PROGRAMM2
FOR /f "delims=" %%I IN ('DIR /s /b /a-d "%SDKarte2%" 2^>NUL') DO MOVE "%%I" . >NUL 2>NUL  
GOTO PROGRAMM
:PROGRAMM3
FOR /f "delims=" %%I IN ('DIR /s /b /a-d "%SDKarte3%" 2^>NUL') DO MOVE "%%I" . >NUL 2>NUL  
GOTO PROGRAMM
:PROGRAMM4
FOR /f "delims=" %%I IN ('DIR /s /b /a-d "%SDKarte4%" 2^>NUL') DO MOVE "%%I" . >NUL 2>NUL  
GOTO PROGRAMM

:PROGRAMM
ECHO hier kanns weiter gehen
PAUSE
Hat jem vielleicht ne Idee wie ich das schöner gestallten kann. Vielen Dank für anregungen und besten Gruß
bastla
bastla 01.06.2010 um 07:33:35 Uhr
Goto Top
Hallo peterpan33!

Eigentlich hatte ich gehofft, Du würdest schon etwas ahnen ...

Wenn Du tatsächlich den Aufruf von ":PROGRAMM" benötigst:
@echo off & setlocal
:NEU
FOR /f "delims=" %%I IN ('DIR /s /b /a-d E:\*.JPG F:\*.JPG G:\*.JPG H:\*.JPG 2^>NUL') DO (MOVE "%%I" . >NUL 2>NUL & call :PROGRAMM "%%I")  
ping 0.0.0.0 -n 5 >NUL
GOTO NEU

:PROGRAMM
ECHO hier kanns weiter gehen
PAUSE
goto :eof
Falls Du (warum auch immer) geschachtelte Schleifen bevorzugst:
@echo off & setlocal
:NEU
for %%L in (E F G H) do (
    FOR /f "delims=" %%I IN ('DIR /s /b /a-d %%L:\*.JPG 2^>NUL') DO (MOVE "%%I" . >NUL 2>NUL & call :PROGRAMM "%%I")  
)
ping 0.0.0.0 -n 5 >NUL
GOTO NEU

:PROGRAMM
ECHO hier kanns weiter gehen
PAUSE
goto :eof
Die Unterprogrammvariante von oben nachzubauen erspare ich uns mal ...

Grüße
bastla

[Edit] Parameterübergabe beim Aufruf des Unterprogrammes ergänzt [/Edit]
peterpan33
peterpan33 01.06.2010 um 09:20:29 Uhr
Goto Top
Hallo Bastla,
leider funktioniert deine Ausführung nicht wie ich mir das vorstelle. Wenn ich das richtig verstehe, nimmt er jetzt jedes Bild einzeln von der SD-Karte und startet dann :Programm. Das wird ne langwierige Geschichte bei ca. 200 Bildern. Er sollen aber alle Bilder (auch jene in Unterordnern) sofort verschoben werden. Das funtioniert bei meiner (unschönen einfachen) Methode auch ganz gut.
Danke und lieben Gruß
Peter
bastla
bastla 01.06.2010 um 10:41:05 Uhr
Goto Top
Hallo peterpan33!

Drum hatte ich ja angemerkt
Wenn Du tatsächlich den Aufruf von ":PROGRAMM" benötigst:

Wenn Du das nicht brauchst, lass einfach den Teil
& call :PROGRAMM "%%I"
weg ...

Grüße
bastla
peterpan33
peterpan33 02.06.2010 um 20:53:48 Uhr
Goto Top
Hallo Bastla,
Ich verstehe dich nicht, oder du scheinst mich nicht zu verstehen. Also ich benötige den CALL PROGRAMM. Er soll aber erst ALLE Bilder verschieben und dann das :PROGRAMM aufrufen. Nicht nach jedem Bild :PROGRAMM aufrufen. Lieben Gruß Peter
bastla
bastla 02.06.2010 um 20:59:12 Uhr
Goto Top
Hallo peterpan33!
Ich verstehe dich nicht, oder du scheinst mich nicht zu verstehen.
ACK

ich benötige den CALL PROGRAMM. Er soll aber erst ALLE Bilder verschieben und dann das :PROGRAMM aufrufen
Dann schreib doch
call :PROGRAMM
einfach in eine neue Zeile zwischen der Schleife und dem Pausen-Ping (also als Zeile 3a bzw 5a) und nicht in den "do"-Teil der Schleife ...

Grüße
bastla
Biber
Biber 02.06.2010 um 21:37:47 Uhr
Goto Top
Moin peterpan33,

ich verfüge ja nicht über bastlas schier unerschöpfliche Geduld...

Und ich finde es grundsätzlich anerkennenswert, wenn du dir so viel Gedanken über automatisierenswerte Prozessablaufoptimierung per Batch machst.

...Dennoch..
... WTF sparst du überhaupt dadurch, dass nach den Zusammenharken aller *.jpg-Dateien gleich ein Mach-whatever-mit-JPG-Programm aufgerufen wird??

Das Zusammenharken ist natürlich automatierbar und automatisierenswert... keine Frage.

Aber
  • hast du wirklich IMMER das Szenario, dass du nach dem MOVEN das Programm aufrufst? Oder auch einmal in der Woche den Fall, dass du nur eben schnell die SD-Karte leeren willst?
  • und selbst wenn IMMER gleich das Programm aufrufen... wieso nicht erst der Doppelklick auf die HarkMirZsamma-Batch auf dem Desktop, dann der Doppelklick auf das Grafikprogramm?

Grüße
Biber
peterpan33
peterpan33 03.06.2010 um 04:43:52 Uhr
Goto Top
Hallo Bastla, hallo Biber,

...Dennoch..
... WTF sparst du überhaupt dadurch, dass nach den Zusammenharken aller *.jpg-Dateien gleich ein Mach-whatever-mit-JPG-Programm aufgerufen wird??
Ich spare dadurch viel Arbeit, da alle Bilder im Anschluss automatisch bearbeitet werden.

hast du wirklich IMMER das Szenario, dass du nach dem MOVEN das Programm aufrufst? Oder auch einmal in der Woche den Fall, dass du nur eben schnell die SD-Karte leeren willst?
Ja es ist immer das gleiche Szenario!
und selbst wenn IMMER gleich das Programm aufrufen... wieso nicht erst der Doppelklick auf die HarkMirZsamma-Batch auf dem Desktop, dann der Doppelklick auf das Grafikprogramm?
Weil alles automatisiert ablaufen soll, da ja wie eben schon gesagt dadurch viel Arbeit gesparrt wird. So verstehe ich auch den Sinn der Batch-Skripte.

BTT

Dann schreib doch
call :PROGRAMM
einfach in eine neue Zeile zwischen der Schleife und dem Pausen-Ping (also als Zeile 3a bzw 5a) und nicht in den "do"-Teil der Schleife ...
Ja darüber habe ich mir natürlich auch schon Gedanken gemacht. Dadurch würde der Sinn meiner Abfrage nicht mehr funktionieren. Es soll ja alle 5 sec. eine Abfrage stattfinden und dann erst beim finden der Bilder ein :Programm Aufruf.

Lieben Gruß und vielen Dank für Zeit und Mühe
Peter
bastla
bastla 03.06.2010 um 09:50:22 Uhr
Goto Top
Hallo peterpan33!

Wie wär's dann damit:
@echo off & setlocal
:NEU
set "Gefunden="  
FOR /f "delims=" %%I IN ('DIR /s /b /a-d E:\*.JPG F:\*.JPG G:\*.JPG H:\*.JPG 2^>NUL') DO (MOVE "%%I" >NUL 2>NUL & set "Gefunden=ja")  
if defined Gefunden call :PROGRAMM
ping 0.0.0.0 -n 5 >NUL
GOTO NEU

:PROGRAMM
ECHO hier kanns weiter gehen
PAUSE
goto :eof
Grüße
bastla