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

Mit SET unterschiedliche Laufwerke einer Variablen zuweisen

Frage Entwicklung Batch & Shell

Mitglied: peterpan33

peterpan33 (Level 1) - Jetzt verbinden

31.05.2010 um 20:39 Uhr, 3156 Aufrufe, 16 Kommentare

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:
01.
SET "Laufwerk1=F:\*.JPG" 
02.
DIR /s /b /a-d "%Laufwerk1%">NUL 2>&1 && GOTO :PROGRAMM  
03.
...
nun müsste ich aber mehrere Laufwerke dieser einen Variablen zuweisen. Also:
01.
SET "Laufwerk1=F:\*.JPG" 
02.
SET "Laufwerk1=E:\*.JPG" 
03.
SET "Laufwerk1=G:\*.JPG" 
04.
DIR /s /b /a-d "%Laufwerk1%">NUL 2>&1 && GOTO :PROGRAMM  
05.
...
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
Mitglied: bastla
31.05.2010 um 21:31 Uhr
Hallo peterpan33!

Die Variable, die sich hier anbietet, wäre die Schleifenvariable einer "for""-Schleife, also etwa:
01.
@echo off & setlocal 
02.
for %%i in (F E G) do ( 
03.
    dir /s /b /a-d "%%i:\*.jpg">nul 2>&1 && call :Programm "%%i" 
04.
05.
:: was danach noch so anliegt 
06.
goto :eof 
07.
 
08.
:Programm 
09.
echo Unterprogramm wurde aufgerufen für Laufwerk %1 
10.
:: was hier zu tun ist 
11.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: Biber
31.05.2010 um 21:51 Uhr
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
Bitte warten ..
Mitglied: peterpan33
31.05.2010 um 22:18 Uhr
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:

01.
:NEU 
02.
For %%A IN (F E G) DO (DIR /s /b /a-d "%%A:\*.JPG">NUL 2>&1 && CALL :PROGRAMM "%%A" 
03.
ping 0.0.0.0 -n 5 >NUL 
04.
GOTO NEU 
05.
:Programm 
06.
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ß
Bitte warten ..
Mitglied: bastla
31.05.2010 um 22:31 Uhr
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
Bitte warten ..
Mitglied: peterpan33
31.05.2010 um 22:38 Uhr
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ß
Bitte warten ..
Mitglied: 90776
31.05.2010 um 23:56 Uhr
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
Bitte warten ..
Mitglied: peterpan33
01.06.2010 um 00:43 Uhr
@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ß
Bitte warten ..
Mitglied: peterpan33
01.06.2010 um 01:25 Uhr
So gehts aber schön ist das nicht:
01.
SET "SDKarte1=E\*.JPG" 
02.
SET "SDKarte2=F\*.JPG" 
03.
SET "SDKarte3=G\*.JPG" 
04.
SET "SDKarte4=H\*.JPG" 
05.
 
06.
:NEU 
07.
DIR /s /b /a-d "%SDKarte1%">NUL 2>&1 && GOTO :PROGRAMM1  
08.
DIR /s /b /a-d "%SDKarte2%">NUL 2>&1 && GOTO :PROGRAMM2 
09.
DIR /s /b /a-d "%SDKarte3%">NUL 2>&1 && GOTO :PROGRAMM3  
10.
DIR /s /b /a-d "%SDKarte4%">NUL 2>&1 && GOTO :PROGRAMM4   
11.
ping 0.0.0.0 -n 5 >NUL 
12.
GOTO NEU 
13.
 
14.
:PROGRAMM1 
15.
FOR /f "delims=" %%I IN ('DIR /s /b /a-d "%SDKarte1%" 2^>NUL') DO MOVE "%%I" . >NUL 2>NUL 
16.
GOTO PROGRAMM 
17.
:PROGRAMM2 
18.
FOR /f "delims=" %%I IN ('DIR /s /b /a-d "%SDKarte2%" 2^>NUL') DO MOVE "%%I" . >NUL 2>NUL 
19.
GOTO PROGRAMM 
20.
:PROGRAMM3 
21.
FOR /f "delims=" %%I IN ('DIR /s /b /a-d "%SDKarte3%" 2^>NUL') DO MOVE "%%I" . >NUL 2>NUL 
22.
GOTO PROGRAMM 
23.
:PROGRAMM4 
24.
FOR /f "delims=" %%I IN ('DIR /s /b /a-d "%SDKarte4%" 2^>NUL') DO MOVE "%%I" . >NUL 2>NUL 
25.
GOTO PROGRAMM 
26.
 
27.
:PROGRAMM 
28.
ECHO hier kanns weiter gehen 
29.
PAUSE
Hat jem vielleicht ne Idee wie ich das schöner gestallten kann. Vielen Dank für anregungen und besten Gruß
Bitte warten ..
Mitglied: bastla
01.06.2010 um 07:33 Uhr
Hallo peterpan33!

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

Wenn Du tatsächlich den Aufruf von ":PROGRAMM" benötigst:
01.
@echo off & setlocal 
02.
:NEU 
03.
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") 
04.
ping 0.0.0.0 -n 5 >NUL 
05.
GOTO NEU 
06.
 
07.
:PROGRAMM 
08.
ECHO hier kanns weiter gehen 
09.
PAUSE 
10.
goto :eof
Falls Du (warum auch immer) geschachtelte Schleifen bevorzugst:
01.
@echo off & setlocal 
02.
:NEU 
03.
for %%L in (E F G H) do ( 
04.
    FOR /f "delims=" %%I IN ('DIR /s /b /a-d %%L:\*.JPG 2^>NUL') DO (MOVE "%%I" . >NUL 2>NUL & call :PROGRAMM "%%I") 
05.
06.
ping 0.0.0.0 -n 5 >NUL 
07.
GOTO NEU 
08.
 
09.
:PROGRAMM 
10.
ECHO hier kanns weiter gehen 
11.
PAUSE 
12.
goto :eof
Die Unterprogrammvariante von oben nachzubauen erspare ich uns mal ...

Grüße
bastla

[Edit] Parameterübergabe beim Aufruf des Unterprogrammes ergänzt [/Edit]
Bitte warten ..
Mitglied: peterpan33
01.06.2010 um 09:20 Uhr
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
Bitte warten ..
Mitglied: bastla
01.06.2010 um 10:41 Uhr
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
Bitte warten ..
Mitglied: peterpan33
02.06.2010 um 20:53 Uhr
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
Bitte warten ..
Mitglied: bastla
02.06.2010 um 20:59 Uhr
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
Bitte warten ..
Mitglied: Biber
02.06.2010 um 21:37 Uhr
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
Bitte warten ..
Mitglied: peterpan33
03.06.2010 um 04:43 Uhr
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
Bitte warten ..
Mitglied: bastla
03.06.2010 um 09:50 Uhr
Hallo peterpan33!

Wie wär's dann damit:
01.
@echo off & setlocal 
02.
:NEU 
03.
set "Gefunden=" 
04.
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") 
05.
if defined Gefunden call :PROGRAMM 
06.
ping 0.0.0.0 -n 5 >NUL 
07.
GOTO NEU 
08.
 
09.
:PROGRAMM 
10.
ECHO hier kanns weiter gehen 
11.
PAUSE 
12.
goto :eof
Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Variablen Zusammenbauen 2.0 ( Batch ) (6)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst FOR Loop Variablen ( Batch ) (2)

Frage von clragon zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...