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

Über Set einer Variablen mehrere Verzeichnisspfade zuweisen

Frage Entwicklung Batch & Shell

Mitglied: peterpan33

peterpan33 (Level 1) - Jetzt verbinden

18.05.2010 um 13:52 Uhr, 3375 Aufrufe, 14 Kommentare

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.
01.
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:
01.
SET "Order=D:\Ordner1;D:\Ordner2;D:\Ordner3"
vielen Dank für Hilfe und lieben Gruß
Mitglied: 60730
18.05.2010 um 13:58 Uhr
Servus,

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

Beispiel
01.
dir %%1 
02.
pause
Und das startetst du dann mit

  • scriptname Ordner1
  • scriptname Ordner2

Du kannst es aber auch als unterpunkt lösen:

01.
:para 
02.
SET "Ordner=D:\Ordner1" && :call sub1 
03.
SET "Ordner=D:\Ordner2" && :call sub1 
04.
 
05.
goto end 
06.
 
07.
:sub1 
08.
dir %Ordner% 
09.
pause 
10.
 
11.
: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:

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

Vielleicht so:
01.
:NEU 
02.
dir /b /a-d D:\Ordner1\*jpg D:\Ordner2\*.jpg "E:\Noch ein Ordner\*.jpg" >nul 2>&1 && GOTO PROGRAMM 
03.
ping -n 5 >NUL 
04.
GOTO NEU 
05.
 
06.
:PROGRAMM 
07.
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" 
08.
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
Bitte warten ..
Mitglied: peterpan33
18.05.2010 um 17:17 Uhr
Hallo hmm so ganz ist das immernoch nicht die Lösung!
Also ich hab jetzt folgendes versucht:
01.
  
02.
SET "ORDNER1=C:\Test\*.JPG" 
03.
SET "ORDNER2=C:\Test1\*.JPG" 
04.
:NEU 
05.
IF EXIST %ORDNER1% GOTO PROGRAMM 
06.
IF EXIST %ORDNER2% GOTO PROGRAMM 
07.
ping 0.0.0.0 -n 5 >nul 
08.
GOTO NEU 
09.
:PROGRAMM 
10.
FOR %%I IN (%ORDNER1%) DO MOVE %%I . >NUL 
11.
FOR %%I IN (%ORDNER2%) DO MOVE %%I . >NUL 
12.
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ß
Bitte warten ..
Mitglied: bastla
18.05.2010 um 17:28 Uhr
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
01.
:NEU 
02.
dir /s /b /a-d D:\*jpg>nul 2>&1 && GOTO :PROGRAMM 
03.
ping -n 5 >NUL 
04.
GOTO :NEU 
05.
 
06.
:PROGRAMM 
07.
for /f "delims=" %%i in ('dir /s /b /a-d D:\*.jpg 2^>nul') do move "%%i" 
08.
pause
oder, wenn nur das Verschieben in den aktuellen Ordner passieren soll, überhaupt gleich zu
01.
:NEU 
02.
for /f "delims=" %%i in ('dir /s /b /a-d D:\*.jpg 2^>nul') do move "%%i" 
03.
ping -n 5 >NUL 
04.
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 ...

Grüße
bastla
Bitte warten ..
Mitglied: LotPings
18.05.2010 um 18:05 Uhr
Wenn schon fast alle mitmachen, versuch ich es auch mal (ungetestet):

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

01.
@Echo off 
02.
(set Ordner="%ALLUSERSPROFILE%" "%USERPROFILE%") 
03.
:NEU 
04.
For %%A in (%Ordner%) Do Call :Process %%A 
05.
ping -n 5 Localhost >NUL 
06.
Echo %time:~0,8% 
07.
GOTO NEU 
08.
:Process 
09.
 Echo %%A 
10.
 For /R "%~1" %%B in (*.jpg) Do Echo move "%%B" . 
11.
 
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" .
Bitte warten ..
Mitglied: bastla
18.05.2010 um 18:11 Uhr
Hallo LotPings!
Ist wohl durch >NUL noch nicht aufgefallen das Ping eine Adresse braucht.
Lag bei mir mehr am Nicht-Testen ...

Grüße
bastla
Bitte warten ..
Mitglied: peterpan33
18.05.2010 um 18:32 Uhr
Hello,
super klappt so wie erhofft. Vielen Dank. Sogar mit Variable also:
01.
SET "Ordner=C:\Ordner\*.JPG" 
02.
:NEU  
03.
dir /s /b /a-d %Ordner%>nul 2>&1 && GOTO :PROGRAMM  
04.
ping -n 5 >NUL  
05.
GOTO :NEU  
06.
 
07.
:PROGRAMM  
08.
for /f "delims=" %%i in ('dir /s /b /a-d %Ordner% 2^>nul') do move "%%i" .>nul 
09.
pause
Wie kann ich auch auf Ordner mit Leerzeichen im Verzeichnisnamen zugreifen?
was bedeutet beim Dir befehl die Syntax /a-d ?
Danke
Bitte warten ..
Mitglied: peterpan33
18.05.2010 um 18:43 Uhr
Holla,
bei mir ist der ping wie folgt:
01.
ping 0.0.0.0 -n 5 >nul
dann findet er zwar nix aber soll ja auch nur warten
Gruß
Bitte warten ..
Mitglied: bastla
18.05.2010 um 21:12 Uhr
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
01.
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
Bitte warten ..
Mitglied: LotPings
18.05.2010 um 21:24 Uhr
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
Bitte warten ..
Mitglied: peterpan33
20.05.2010 um 15:06 Uhr
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??
01.
SET "Ordner=C:\Test 1\*.JPG" 
02.
:NEU 
03.
DIR /s /b /a-d "%Ordner%">NUL 2>&1 && GOTO :PROGRAMM  
04.
ping 0.0.0.0 -n 5 >NUL 
05.
rem oder halt ping -n 5 Localhost >NUL  
06.
GOTO NEU 
07.
:PROGRAMM 
08.
FOR /f "delims=" %%I IN ('DIR /s /b /a-d "%Ordner%" 2^>NUL') DO MOVE "%%I" . >NUL 2>NUL 
09.
ECHO hier können jetzt noch weitere Bearbeitungsschritte eingefuegt werden 
10.
GOTO NEU
Vielen Dank für die Hilfe und besten Gruß
Bitte warten ..
Mitglied: LotPings
20.05.2010 um 15:26 Uhr
Hallo peterpan33,

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

Schön wenn es klappt.

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

Gruß
Lotpings
Bitte warten ..
Mitglied: peterpan33
20.05.2010 um 15:49 Uhr
bzg. 0.0.0.0 .... ein wenig Eigenleistung soll ja auch noch drinstecken
Besten Gruß
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
LAN, WAN, Wireless
Mehrere Hardware Firewalls (10)

Frage von cerberus90 zum Thema LAN, WAN, Wireless ...

VB for Applications
gelöst Excel VBA Eine oder mehrere Zellen Verschieben (2)

Frage von batchnewbie zum Thema VB for Applications ...

VB for Applications
gelöst Mehrere Charts per VBA erstellen lassen, Titel wird nicht angezeigt

Frage von Aximand zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...