peterpan33
Goto Top

Über Set einer Variablen mehrere Verzeichnisspfade zuweisen

Hallo,
ich hab folgendes Problem. Ich habe ein kleine Batch datei geschrieben, die alle x min einen Ordner auf dessen Inhalt überprüft. Den Pfad des Ordners habe ich über "set" eine Variabel zugewiesen.
SET "Order=D:\Ordner1"  
Nun würde ich aber gerene X ordner überprüfen. Also wenn in Ordner 1 oder Ordner2 oder Ordner3 eine Datei dann gehe zu usw.
meine Frage, wie kann ich meine Set Variable so erweitern, dass sie sich auf mehrere Ordner bezieht.
also sollte in der art aussehen:
SET "Order=D:\Ordner1;D:\Ordner2;D:\Ordner3"  
vielen Dank für Hilfe und lieben Gruß

Content-ID: 143056

Url: https://administrator.de/forum/ueber-set-einer-variablen-mehrere-verzeichnisspfade-zuweisen-143056.html

Ausgedruckt am: 23.12.2024 um 14:12 Uhr

60730
60730 18.05.2010 um 13:58:58 Uhr
Goto Top
Servus,

im prinzip kannst du das auch anders lösen...

Beispiel
dir %%1
pause

Und das startetst du dann mit

  • scriptname Ordner1
  • scriptname Ordner2

Du kannst es aber auch als unterpunkt lösen:

:para
SET "Ordner=D:\Ordner1" && :call sub1  
SET "Ordner=D:\Ordner2" && :call sub1  

goto end

:sub1
dir %Ordner%
pause

:end

.. und nach Rom führen auch noch andere Wege - probier es erstmal mit den beiden oberen.

Gruß

Ps: Wenn wir wüßten, was du da (in den Ordnern) suchst, wäre es einfacher, als Beispiel:

if exist D:\Ordner1\*.txt SET "Ordner=D:\Ordner1" && :call sub1  
peterpan33
peterpan33 18.05.2010 um 14:17:38 Uhr
Goto Top
Hallo,
danke für die schnelle Anwort, leider werde ich nicht ganz schlau daraus.
Also es geht mir nicht ums suchen. Ich habe folgendes
SET "ORDNER=D:\Ordner1\*JPG"  
:NEU
IF EXIST %ORDNER% GOTO PROGRAMM
ping -n 5 >NUL
GOTO NEU
So nun will ich ihn aber in mehreren Ordnern nach *JPG suchen lassen!
Danke und Gruß
bastla
bastla 18.05.2010 um 14:51:20 Uhr
Goto Top
Hallo peterpan33!

Vielleicht so:
:NEU
dir /b /a-d D:\Ordner1\*jpg D:\Ordner2\*.jpg "E:\Noch ein Ordner\*.jpg" >nul 2>&1 && GOTO PROGRAMM  
ping -n 5 >NUL
GOTO NEU

:PROGRAMM
for /f "delims=" %%i in ('dir /s /b /a-d D:\Ordner1\*jpg D:\Ordner2\*.jpg "E:\Noch ein Ordner\*.jpg" 2^>nul') do echo Bearbeite "%%i"  
goto :NEU
Voraussetzung ist hier, dass es nicht in Unterordnern der zu überprüfenden Ordner ".jpg"-Dateien gibt, die nicht bearbeitet werden sollen ...

Grüße
bastla
peterpan33
peterpan33 18.05.2010 um 17:17:09 Uhr
Goto Top
Hallo hmm so ganz ist das immernoch nicht die Lösung!
Also ich hab jetzt folgendes versucht:
 
SET "ORDNER1=C:\Test\*.JPG"  
SET "ORDNER2=C:\Test1\*.JPG"  
:NEU
IF EXIST %ORDNER1% GOTO PROGRAMM
IF EXIST %ORDNER2% GOTO PROGRAMM
ping 0.0.0.0 -n 5 >nul
GOTO NEU
:PROGRAMM
FOR %%I IN (%ORDNER1%) DO MOVE %%I . >NUL
FOR %%I IN (%ORDNER2%) DO MOVE %%I . >NUL
pause
hmm mir fällt gerade ein kann ich nicht einfach eine Variablen festlegen, die sich auf alle *.JPG eines Laufwerks bezieht? Also ich habe z.B eine JPG datei in verschiedenen Unterordnern eines Laufwerks, weiß aber nicht in welchem. Kann ich der Variablen sagen, du bist diejenige die sich auf diese bezieht und dann die IF befehle durchlaufen lassen?
Danke und lieben Gruß
bastla
bastla 18.05.2010 um 17:28:10 Uhr
Goto Top
Hallo peterpan33!
Kann ich der Variablen sagen, du bist diejenige die sich auf diese bezieht und dann die IF befehle durchlaufen lassen?
Ich hätte in diesem Fall einfach zu
:NEU
dir /s /b /a-d D:\*jpg>nul 2>&1 && GOTO :PROGRAMM
ping -n 5 >NUL
GOTO :NEU

:PROGRAMM
for /f "delims=" %%i in ('dir /s /b /a-d D:\*.jpg 2^>nul') do move "%%i"  
pause
oder, wenn nur das Verschieben in den aktuellen Ordner passieren soll, überhaupt gleich zu
:NEU
for /f "delims=" %%i in ('dir /s /b /a-d D:\*.jpg 2^>nul') do move "%%i"  
ping -n 5 >NUL
GOTO :NEU
geraten (beides ungetestet), aber da kommt leider nur im ersten Vorschlag (und das nur implizit - "&&" steht nämlich für "nur ausführen, wenn beim vorigen Befehl kein Fehler aufgetreten ist", was hier also bedeutet, wenn eine passende Datei gefunden wurde) ein "IF" vor ... face-wink

Grüße
bastla
77559
77559 18.05.2010 um 18:05:18 Uhr
Goto Top
Wenn schon fast alle mitmachen, versuch ich es auch mal (ungetestet):

Ist wohl durch >NUL noch nicht aufgefallen das Ping eine Adresse braucht.

@Echo off
(set Ordner="%ALLUSERSPROFILE%" "%USERPROFILE%")  
:NEU
For %%A in (%Ordner%) Do Call :Process %%A
ping -n 5 Localhost >NUL
Echo %time:~0,8%
GOTO NEU
:Process
 Echo %%A
 For /R "%~1" %%B in (*.jpg) Do Echo move "%%B" .  
 

Wenn die Ausgabe richtig erscheint, das Echo vor dem Move entfernen.

Gruß
LotPings

PS: Aus mir noch nicht erklärlichen Gründen funktioniert dies nicht:
For %%A in (%Ordner%) Do For /R "%%~A" %%B in (*.jpg) Do Echo move "%%B" .
bastla
bastla 18.05.2010 um 18:11:51 Uhr
Goto Top
Hallo LotPings!
Ist wohl durch >NUL noch nicht aufgefallen das Ping eine Adresse braucht.
Lag bei mir mehr am Nicht-Testen ... face-wink

Grüße
bastla
peterpan33
peterpan33 18.05.2010 um 18:32:47 Uhr
Goto Top
Hello,
super klappt so wie erhofft. Vielen Dank. Sogar mit Variable also:
SET "Ordner=C:\Ordner\*.JPG"  
:NEU 
dir /s /b /a-d %Ordner%>nul 2>&1 && GOTO :PROGRAMM 
ping -n 5 >NUL 
GOTO :NEU 

:PROGRAMM 
for /f "delims=" %%i in ('dir /s /b /a-d %Ordner% 2^>nul') do move "%%i" .>nul  
pause
Wie kann ich auch auf Ordner mit Leerzeichen im Verzeichnisnamen zugreifen?
was bedeutet beim Dir befehl die Syntax /a-d ?
Danke
peterpan33
peterpan33 18.05.2010 um 18:43:24 Uhr
Goto Top
Holla,
bei mir ist der ping wie folgt:
ping 0.0.0.0 -n 5 >nul
dann findet er zwar nix aber soll ja auch nur warten
Gruß
bastla
bastla 18.05.2010 um 21:12:41 Uhr
Goto Top
Hallo peterpan33!
Wie kann ich auch auf Ordner mit Leerzeichen im Verzeichnisnamen zugreifen?
Indem Du Sie unter Anführungszeichen setzt - daher:
dir /s /b /a-d "%Ordner%">nul 2>&1 && GOTO :PROGRAMM
Hast Du nach der "pause" noch mehr vor? Wenn nein würde ich (wie in meinem zweiten Beispiel oben) die eine relevante Zeile aus dem Unterprogramm einfach nach oben ziehen, wodurch sie sich mit der ohnehin nötigen Schleifen kombinieren lässt (auf Wunsch auch mit der - nicht erforderlichen - Angabe des Zieles "."):
for /f "delims=" %%i in ('dir /s /b /a-d "%Ordner%" 2^>nul') do move "%%i" .>nul
was bedeutet beim Dir befehl die Syntax /a-d ?
Es sollen keine "directories" (sondern nur Dateien) aufgelistet werden - vermutlich nicht nötig (es sei denn, ein Ordner hieße etwa "Alle.meine.jpg"), aber auch nicht schädlich ...
Noch kurz zum unten angeführten
ping 0.0.0.0 -n 5 >nul
Dagegen hätte LotPings ja sicher kaum Einwände (obwohl ich mit 127.0.0.1 eher zu einer existierenden IP greifen würde) - es war nur in allen Beispielen oberhalb die Adresse (0.0.0.0) nicht enthalten ...

Grüße
bastla
77559
77559 18.05.2010 um 21:24:55 Uhr
Goto Top
Wenn du deinen Code postest , sollte er auch komplett sein.
Wie bastla schon angemerkt hat fehlte das 0.0.0.0 bisher und das bessere 127.0.0.1 entspricht Localhost.

Außerdem scheinst du meine Variante nicht ausprobiert zu haben,
denn die war von Anfang an auf Ordner-/Dateinamen mit Leerzeichen vorbereitet.

Gruß
LotPings
peterpan33
peterpan33 20.05.2010 um 15:06:58 Uhr
Goto Top
Ja da hast du natürlich recht. Mein Fehler, verzeihung dafür!
Als Wiedergutmachung hier jetzt mein Code vollständig (so hoffe ich). Bei mir funktioniert er. Lotpings Lösung hat bei mir leider nicht funktioniert. Weiß nicht warum??
SET "Ordner=C:\Test 1\*.JPG"  
:NEU
DIR /s /b /a-d "%Ordner%">NUL 2>&1 && GOTO :PROGRAMM   
ping 0.0.0.0 -n 5 >NUL
rem oder halt ping -n 5 Localhost >NUL 
GOTO NEU
:PROGRAMM
FOR /f "delims=" %%I IN ('DIR /s /b /a-d "%Ordner%" 2^>NUL') DO MOVE "%%I" . >NUL 2>NUL  
ECHO hier können jetzt noch weitere Bearbeitungsschritte eingefuegt werden
GOTO NEU
Vielen Dank für die Hilfe und besten Gruß
77559
77559 20.05.2010 um 15:26:00 Uhr
Goto Top
Hallo peterpan33,

von dem ungünstigen 0.0.0.0 kannst du dich wohl schwer trennen face-wink

Schön wenn es klappt.

Jetzt noch den Beitrag auf gelöst setzen und wir kriegen alle schöne Pfingsten.

Gruß
Lotpings
peterpan33
peterpan33 20.05.2010 um 15:49:19 Uhr
Goto Top
bzg. 0.0.0.0 .... ein wenig Eigenleistung soll ja auch noch drinstecken face-wink
Besten Gruß