Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung Batch & Shell

GELÖST

Rekursive suche nach bestimmten Datentypen

Mitglied: n3-narf

n3-narf (Level 1) - Jetzt verbinden

26.04.2012, aktualisiert 18.10.2012, 3728 Aufrufe, 25 Kommentare

Hallo,

ich habe hier im Forum schon einige Beispiel zu ähnlichen Fragen gefunden, aber leider Lösung für mein spezielles "Problem".

Ich möchte gern ein Skript vom USB Stick starten und alle Laufwerke rekursiv nach bestimmten Datentypen durchsuchen. Dabei kommt es auf die Dateiendung und deren Größe an (z.B. jpg & jpeg die größer als 1024kb sind). Die gefundenen Daten sollen auf den USB-Stick mit der original Ordnerstruktur in den Ordner BACKUP kopiert werden. Es sei zu beachten, dass der Laufwerksbuchstabe sich ändern kann. Hier eignet sich vermutlich %CD:~0,3%.

Ich habe schon gelesen, dass häufig empfohlen wird erst mit DIR die Ausgabe in eine Datei umzulenken und diese dann zu verarbeiten. Welchen Vorteil hat dies gegenüber der sofortigen Abarbeitung?

Beste Grüße,
n3
Mitglied: Skyemugen
26.04.2012 um 12:57 Uhr
Zitat von n3-narf:
Hallo,
Aloha.
ich habe hier im Forum schon einige Beispiel zu ähnlichen Fragen gefunden, aber leider Lösung für mein spezielles "Problem".
Ja, die Welt ist voller Spezialitäten ...
Ich möchte gern ein Skript vom USB Stick starten
Ein Glück, ich dachte schon, wir sollen dir mal eben eines zusammenkneten.
und alle Laufwerke rekursiv nach bestimmten Datentypen durchsuchen. Dabei kommt es auf die Dateiendung und deren Größe an (z.B. jpg & jpeg die größer als 1024kb sind).
Hm, noch nie dagewesen - neu und interessant ...
gefundenen Daten sollen auf den USB-Stick mit der original Ordnerstruktur in den Ordner BACKUP kopiert werden. Es sei zu beachten, dass der Laufwerksbuchstabe sich ändern kann. Hier eignet sich vermutlich %CD:~0,3%.
Original-Ordnerstruktur, bedeutet also auch einen Ordner %Laufwerksbuchstabe%, da sonst u.U. auf versch. Partitionen dieselbe Struktur vorhanden sein könnte(?)
Ich habe schon gelesen, dass häufig empfohlen wird
Stiftung Warentest?
erst mit DIR die Ausgabe in eine Datei umzulenken und diese dann zu verarbeiten. Welchen Vorteil hat dies gegenüber der sofortigen Abarbeitung?
In >90% aller Fälle gar keinen und ist meist völlig überflüssig

Ja, ja, ja, das ist keine Hilfe, ich trolle gerade mal wieder ... und warum? Wie viele Skripte hast du denn aus dem Forum herausfiltern können, welche hast du probiert? Evtl. versucht umzustricken? Wo genau hängt es jetzt, Räder sind rund und bleiben rund und davon haben wir so viele Stapelverarbeitungsdateien ...

greetz André
Bitte warten ..
Mitglied: mak-xxl
26.04.2012 um 13:14 Uhr
Moin n3,

ich (t)rolle mal 2 (ganz alte und folglich durch häufigen Gebrauch rund geschliffene) Stichwörter in die Arena:

- robocopy mit der Option /MIN:xxx [Bytes]

- for %i in (jpg tiff mpg) do ...

Viel Erfolg und freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: n3-narf
26.04.2012 um 13:41 Uhr
OK, ich hätte meine aktuelle Lösung vielleicht schon anfügen sollen. Ich wollte aber nicht in eine bestimmte Richtung lenken. Hier mein aktuelles Skript:

01.
@echo off 
02.
 
03.
set SkriptLW=%CD:~0,2% 
04.
 
05.
 
06.
FOR %%i IN (\'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\') DO IF EXIST %%i: dir *.jpg *.jpeg /s /b %%i:\ > %SkriptLW%\Backup\liste.txt 
07.
For /F "Delims=" %%N in (%SkriptLW%\Backup\liste.txt) do xcopy /Y /C /H /Y /J "%%N" %SkriptLW%\Backup\ 
08.
 
09.
pause
Ob es funktioniert weiß ich nicht genau. Einen Probelauf würde ich erst dann machen, wenn ich sicher bin dann der Code richtig ist. Wie man aber sieht, gehe ich über eine externe Datei, was nicht schön ist. Ich weiß aber nicht, wie man es besser lösen kann.

OK, hier eine robocopy Version

01.
@echo off 
02.
 
03.
set SkriptLW=%CD:~0,2% 
04.
 
05.
FOR %%i IN (\'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\') DO IF EXIST %%i: robocopy %%i:\ %SkriptLW%\Backup\ *.jpg *.jpeg /S /MIN:512000 
06.
 
07.
pause
Bitte warten ..
Mitglied: mak-xxl
26.04.2012 um 14:30 Uhr
Moin n3,

wenn Du vorab ohne Gefahr die Richtigkeit der resultierenden Befehle prüfen willst, stellst Du ein 'echo' vor den schlussendlichen Befehl (i.e. 'robocopy'), also etwa (mit anderen, kleinen Korrekturen und Ergänzungen) so:

for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if /i %%i: neq %ScriptLW% if exist %%i:\NUL echo robocopy %i: %ScriptLW%\Backup\%%i *.jpg *.jpeg /S /MIN:512000 /R:1 /W:1
Netzlaufwerke und/oder Bereitstellungspunkte vs. Stickkapazität beachten!

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: 106009
26.04.2012 um 14:30 Uhr
Hi,

alle möglichen Laufwerke zu durchsuchen halte ich nicht für zielführend. Dazu müsste dann auch \' in der Klammer ersatzlos raus, das stört.

Vorschlag: Nur die tatsächlich vorhandenen Laufwerke ermitteln und dann die Variable "%Liste%" zur weiteren Verwendung nutzen, dann kannst du auf if exist %%i: auch verzichten:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set Liste= 
03.
for /F "delims=\" %%a in ('fsutil fsinfo drives ^| find ":"') do set "Liste=!Liste! %%a\" 
04.
:: Im Anfang der Variablen steht noch "Laufwerke: ", das muss weg. Evtl. für die englischsprachige Version die Länge 12 entsprechend anpassen 
05.
Set Liste=!Liste:~12! 
06.
@echo %liste% 
07.
pause
fsutil benötigt Adminrechte, die wirst du ja sicher besitzen.

Gruß
Bitte warten ..
Mitglied: n3-narf
26.04.2012 um 15:25 Uhr
@106009
Ich versuche erst einmal die "einfachere" Variante. Deine Lösung verstehe ich nicht auf Anhieb und muss da noch etwas im Internet nachlesen

@mak-xxl
Dein Code hatte noch zwei Fehler und jetzt funktioniert es wunderbar.

1. do if exist
2. Anführungsstrihe beim Quellverzeichnis
01.
FOR %%i IN (F G) DO IF /i %%i: neq %ScriptLW% do if exist %%i: robocopy %%i:\"%SkriptLW%\Backup\%%i" *.jpg *.jpeg /S /MIN:512000
Danke für eure Hilfe!!
Bitte warten ..
Mitglied: 106009
26.04.2012 um 15:37 Uhr
Zitat von n3-narf:
@106009
Ich versuche erst einmal die "einfachere" Variante. Deine Lösung verstehe ich nicht auf Anhieb und muss da noch
etwas im Internet nachlesen

Die Erklärung ist verhältnismäßig einfach:
Der FSUTIL-Befehl gibt die Laufwerksbezeichnungen, die existieren, zwar in einer Zeile aus, allerdings mit einem Nullbyte hinter jedem Backslash, deshalb kann man die Variablen nicht weiterverarbeiten.
Mit meinem Script wird daraus eine Variable "Liste" erzeugt, die hinter jeden Pfadbezeichner noch ein Leerzeichen einfügt, so dass die Variable so verwendet werden könnte wie deine Eingabe von Hand in die Klammer. Und da die Ausgabe von fsutil noch ein "Laufwerk: " am Anfang der Zeile enthält, muss man diesen Anfang noch killen. Das ist eigentlich alles.
Das Aneinanderreihen von Werten innerhalb einer For-Schleife funktioniert nur mit der verzögerten Variablenverarbeitung enabledelayedexpansion, mit der man dann auch an Stelle des %-Zeichens das !-Zeichen verwenden kann.

Ich hoffe, das ist damit etwas klarer.

Gruß

.
Bitte warten ..
Mitglied: mak-xxl
26.04.2012 um 16:55 Uhr
Moin n3,

Zitat von n3-narf:
@mak-xxl
Dein Code hatte noch zwei Fehler und jetzt funktioniert es wunderbar.
1. do if exist

In dem von mir geposteten Code stand und steht nur 1x 'do' - genau dort, wo es hingehört, als/an das Ende der 'for'-Schleife.

2. Anführungsstrihe beim Quellverzeichnis
> FOR %%i IN (F G) DO IF /i %%i: neq %ScriptLW% do if exist %%i: robocopy %%i:\"%SkriptLW%\Backup\%%i" *.jpg *.jpeg /S /MIN:512000 
> 

Es gibt in meinem Post kein Quellverzeichnis, sondern nur ein Quellaufwerk (durch '%%i:' repräsentiert), selbiges braucht keine Literale; - die von Dir im eigenen Post gesetzten Literale umschließen das Zielverzeichnis '%ScriptLW&\Backup\%%i' - und das braucht, wenn es keine Leerzeichen enthält, auch keine einschließenden Literale - also habe ich es genau so gepostet.
Diese Zeile Code wird so außerdem nicht funktionieren, weil zwischen Quelle ('%%i:') und Ziel ("%SkriptLW%\Backup\%%i") das Leezeichen fehlt.

BTW: Die Schreibweise
if exist %%i:\NUL
war ebenfalls nicht ohne Grund gewählt, damit werden Laufwerke ohne Medium (CD, REV etc.) automatisch übersprungen, deshalb am Ende des Posts nur der Hinweis auf Netzlaufwerke und Junction-Points.

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: n3-narf
26.04.2012 um 18:25 Uhr
Wenn ich das do weglasse, dann kommt folgender Fehler

Der Befehl "exist" ist entweder falsch geschrieben oder konnte nicht gefunden werden.

Im meinem vorherigen Post steht es auch zweimal da: DO IF und DO IF EXISTS. Mit 2x do, funktioniert der Code einwandfrei. Das \NUL habe ich tatsächlich vergessen. Danke für den Hinweis.

@106009
Danke für die Erklärung. Zwar prüft deine Variante nur existierende Laufwerke, benötigt aber Adminrechts. Ich bevorzuge daher lieber den Code, der ohne auskommt.
Bitte warten ..
Mitglied: mak-xxl
26.04.2012 um 19:56 Uhr
Moin n3,

Zitat von n3-narf:
Wenn ich das do weglasse, dann kommt folgender Fehler
> Der Befehl "exist" ist entweder falsch geschrieben oder konnte nicht gefunden werden.

Ja gewiss, wenn die 'for'-Schleife nicht mit 'do' abgeschlossen wird, kommt die Fehlermeldung. Und wenn Du aus meinem Post die Sequenz 'do if /i %%i: neq %ScriptLW%' herausnimmst, rückt das nächste 'if' ans Ende der Schleife - und ergibt folgerichtig einen Fehler.

Im meinem vorherigen Post steht es auch zweimal da: DO IF und DO IF EXISTS.

Weil u.a. das falsch war und ist, kam auch mein Hinweis auf 'kleinere Korrekturen'.

Mit 2x do, funktioniert der Code einwandfrei. Das ...

... halte ich für ein Gerücht, ein einzelnes (weiteres) 'do' ergibt den Fehler 'Der Befehl "do" ist entweder falsch geschrieben oder ...'

BTW: Was schnelleren Code betrifft: <fsutil.exe> ist ein externer Befehl, der für jedes einzelne Laufwerk (A-Z) eine Meldung ausgibt, die (weiter verarbeitbare) Kennzeichnung auf Existenz muss aber nochmals erfolgen - und dazu dient der zusätzliche, wiederum externe Befehl <findstr.exe>, der die Ausgabestrings von <fsutil> nach einem Doppelpunkt filtert, der nur bei existierenden Laufwerken im Ausgabestring auftaucht - soviel dazu.

Das verwenden wirklich 'sinnvoller' Laufwerksbuchstaben (also solcher, mit denen ein Laufwerk existiert und auch vermutete Daten enthält), schafft hier größeren Überblick und schnelleren Code.

Wenn es um eine Art 'Universalität' geht, dann kann man beispielsweise zu Beginn des Scriptes eine Variable mit Laufwerksbuchstaben füllen, die etwa von dem Konstrukt 'fsutil fsinfo drivetype', gefiltert nach dem Wort 'Eingebautes' nur mit den Buchstaben gesetzt wird, die Festplatten/Partitionen darstellen - alle CD-ROMs oder etwa Netzlaufwerke bleiben draußen. Diese Liste kann man wiederum, u.U. ohne weitere Überprüfung, per 'for'-Schleife mit robocopy verarbeiten.
Die Sequenz 'if /i %%i: neq %ScriptLW%' war übrigens (aus Gründen ebendieser Universalität) drin, damit <robocopy> nicht den Inhalt des Sticks kopierenswert interessant findet ...

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: bastla
27.04.2012, aktualisiert 18.10.2012
Hallo Mario!
Wenn es um eine Art 'Universalität' geht, dann kann man beispielsweise zu Beginn des Scriptes eine Variable mit Laufwerksbuchstaben füllen, die etwa von dem Konstrukt 'fsutil fsinfo drivetype', gefiltert nach dem Wort 'Eingebautes' nur mit den Buchstaben gesetzt wird, die Festplatten/Partitionen darstellen
Dann aber vielleicht lieber doch eine VBS-Variante (kommt ohne Admin-Rechte aus) - als Basis etwa wie hier ...

Grüße
bastla
Bitte warten ..
Mitglied: pieh-ejdsch
02.05.2012 um 14:59 Uhr
moin,

Bei der Zeile wird mir bissel mulmig.
01.
set SkriptLW=%CD:~0,2%
Wenn Du Dich zum Testen auf der CMD-Line im Falschen Pfad befindest.

Besser ists, den Batchpfad aus dem Batchparameter zu benutzen.
set "SkriptLW=%~d0\"
Gruß Phil
Bitte warten ..
Mitglied: Dani
04.05.2012 um 00:11 Uhr
Moin,
wie schaut's aus n3-narf, kommst du voran?


Grüße
Bitte warten ..
Mitglied: n3-narf
06.05.2012 um 17:01 Uhr
Ja, habe eine Lösung die zwar nicht optimal ist, aber sie macht genau das was ich brauche Danke der Nachfrage!
Bitte warten ..
Mitglied: bastla
06.05.2012 um 17:06 Uhr
[OT]
Hallo n3-narf!
Lösung die zwar nicht optimal ist, aber sie macht genau das was ich brauche
Wäre denn diese - nicht dargestellte - Lösung nur optimal, wenn sie nicht genau machen würde, was Du brauchst?

Grüße
bastla
[/OT]
Bitte warten ..
Mitglied: Biber
06.05.2012 um 18:53 Uhr
Moin n3-narf,

Zitat von n3-narf:
Ja, habe eine Lösung die zwar nicht optimal ist, aber sie macht genau das was ich brauche Danke der Nachfrage!
Seufz...

Da muss ich wohl etwas weiter ausholen, wie ein Forum funktioniert...

Wenn hier jemand eine Frage stellt, dafür ein paar hilfreiche Lösungsansätze gereicht bekommt von Samaritern, die sich freiwillig zusätzlich zu den eigenen Problemen noch die Probleme eines n3-narfs zu eigen machen...
Wenn der Fragesteller dann eine Lösung findet für dieses mittlerweile einer Handvoll Empathisanten den Schlaf raubende Problem...

Dann wäre es eigentlich selbstverständlich, diese Lösung der Allgemeinheit.... Nein, lass es mich anders ausdrücken.

In der Wikipedia steht auch einiges zum Thema Lösungen , unter anderem folgendes:
Ist in einer Lösung so viel wie möglich des Stoffes gelöst, ist die Lösung gesättigt; wird jetzt weiterer Stoff zur Lösung gegeben, führt dies zur Bildung eines Bodensatzes.

Ergänzend zur Wikipedia:
Falls die "Lösung" in diesem Beitrag nicht etwas angereichert wird vorzugsweise durch den Codeschnipsel, der das Problem nun für dich behebt, dann landet dieser Beitrag in Bereich "Bodensatz".

Immer wieder beeindruckt von der Vielfältigkeit der Lebensformen in diesem Zweigarm der Galaxie [Edit]das könnte zu hart klingen[/Edit]

"Herr, wie zahlreich sind deine Werke! Mit Weisheit hast du sie alle gemacht, die Erde ist voll von deinen Geschöpfen." (Psalm 104.24 gem. Einheitsübersetzung)
Biber
Bitte warten ..
Mitglied: n3-narf
06.05.2012 um 19:50 Uhr
@Biber,
Tut mir leid, aber ich ging davon aus, dass die Lösung klar wäre, da sie ja bereits oben gepostet wurde. Ich hole es aber gern noch einmal nach:

@echo off 
 
set SkriptLW=%CD:~0,2% 
 
FOR %%i IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO IF /i %%i: neq %ScriptLW% do if exist %%i:\NUL robocopy %%i:\ "%SkriptLW%\Backup\%%i" *.tmp *.dat /S /MIN:512000 
 
pause
In diesem Beispiel werden alle dat und tmp Dateien gesucht, die größer sind als 512kb. Das Skript wird als bat Datei von einem USB Stick gestartet und funktioniert soweit.

Danke noch einmal an alle die mir geholfen haben.
Bitte warten ..
Mitglied: Biber
06.05.2012 um 20:00 Uhr
Moin n3-narf,

danke dir für die schnelle Reaktion und Lösungsbereit- bzw. Richtigstellung.

Ich denke, bastla wird auch auf weitere Betrachtungen von nicht optimalen funktionierenden Lösungen im Vergleich zu optimalen nicht funktionierenden Lösungen an dieser Stelle verzichten können - damit ist der Beitrag dann richtigerweise als "gelöst" markiert.

Schönen Abend und danke
Biber
Bitte warten ..
Mitglied: bastla
06.05.2012 um 21:35 Uhr
bastla wird auch auf weitere Betrachtungen von nicht optimalen funktionierenden Lösungen im Vergleich zu optimalen nicht funktionierenden Lösungen an dieser Stelle verzichten können
Amen.

Grüße
bastla
Bitte warten ..
Mitglied: pieh-ejdsch
07.05.2012 um 11:52 Uhr
moin,

ich würde mich nicht damit abfinden wollen:
Zitat von mak-xxl:
BTW: Die Schreibweise
if exist %%i:\NUL
war ebenfalls nicht ohne Grund gewählt, damit werden Laufwerke ohne Medium (CD, REV etc.) automatisch übersprungen, deshalb am Ende des Posts nur der Hinweis auf Netzlaufwerke und Junction-Points.

Ob mit oder ohne nul - bei mir sind da immer die Meldungen gekommen, dass sich kein Datenträger im Laufwerk befindet.
Ist doch sehr Automatisch ...

Wenn mit dir oder vol (auf alle Fälle ohne nul) getestet wird kommt diese Meldung nicht.
Zumal könnte noch Unterschieden werden in Vorhandene Lokale und Vorhandene gemappte Laufwerke.
Das Equipment ist ja net umsonst da.

von nicht optimalen funktionierenden Lösungen im Vergleich zu optimalen nicht funktionierenden Lösungen
Nur für die Sammlung:
01.
for /f "delims=\ " %%i in ('mountvol ^|find ":\" ^|sort ^&net use ^|find ":" ') do @if %%i neq %~d0 vol %%i 2>nul 1>&2 && echo Laufwerk %%i wird untersucht.
PS:
Zitat von n3-narf:
Tut mir leid, aber ich ging davon aus, dass die Lösung klar wäre, da sie ja bereits oben gepostet wurde. Ich hole es aber gern noch einmal nach:
FOR %%i IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO IF /i %%i: neq %ScriptLW% do
Und täglich grüßt das Murmeltier!

Gruß Phil
Bitte warten ..
Mitglied: Biber
07.05.2012 um 12:17 Uhr
Moin pieh-ejdsch,

dann möchte ich bei deiner Mountvol+Net Use-Variante aber anmerken, dass eventuelle per SUBST definierte Laufwerke nicht bemerkt werden.

Im Gegensatz zu ollidollis Lösung mit fsutil.
Beispielkonstellation an meinem Notebook mit CD, ein paar USB-Einheiten, zwei SUBST-Laufwerken und ohne verbundene Netzlaufwerke..
Demo am CMD-Prompt:
>mountvol |find ":\" 
        C:\ 
        D:\ 
        E:\ 
        H:\ 
        G:\ 
        J:\ 
        I:\ 
        F:\ 
 
(=12:11:42  d:\temp=) 
>net use 
Neue Verbindungen werden gespeichert. 
 
Es sind keine Einträge in der Liste. 
 
> subst 
B:\: => D:\Biber\work 
K:\: => D:\Biber\archiv 
 
(=12:12:49  d:\temp=) 
>fsutil fsinfo drives 
 
Laufwerke: B:\ C:\ D:\ E:\ F:\ G:\ H:\ I:\ J:\ K:\
Grüße
Biber
Bitte warten ..
Mitglied: mak-xxl
07.05.2012 um 12:41 Uhr
Moin Phil,

Zitat von pieh-ejdsch:
Ob mit oder ohne nul - bei mir sind da immer die Meldungen gekommen, dass sich kein Datenträger im Laufwerk befindet.
Ist doch sehr Automatisch ...

Danke für den Hinweis. Ich selbst habe in dem mir zur Verfügung stehenden Rechner-Umfeld bisher keine Probleme mit der Prüfung auf das NUL-Device gehabt. Du hast aber Recht, dieses Vorgehen wird auf manchen Plattformen mit einer Fehlermeldung bestraft.

Der 'dir'-Befehl ist aus meiner Sicht dem 'vol'-Befehl vorzuziehen, da hierbei neben der Laufwerksangabe ein Pfad mit übergeben werden kann, so sind Junction-Points gleich mit zu behandeln. Ein 'vol A:\' gibt eben nicht den gewünschten Fehlerpegel zurück - ein 'vol A:' schon ...

Nur für die Sammlung: ...

Da jetzt 'mountvol' wieder salonfähig ist (wegen benötigter Adminrechte war die for-Schleife favorisiert worden), würde ich folgende Lösung anmerken, da mir:
- (noch) nicht einleuchtet, warum ich die Ausgabe von 'mountvol' auf Netzlaufwerke gegenprüfen sollte;
- relativ einfach auf Laufwerke resp. Junction-Points geprüft werden kann,
- mit dem 'dir'-Befehl die Ausgabe direkt verarbeitet werden kann (Grund: s.o.).

Ermitteln lokaler Laufwerke, auf die derzeit Zugriff möglich ist:
@for /f %%i in ('mountvol ^| findstr ":\\$"') do @dir %%i 2>nul 1>&2 && @echo %%i

Ermitteln von Junction-Points, auf die derzeit Zugriff möglich ist:
@for /f %%i in ('mountvol ^| findstr ":\\."') do @dir %%i 2>nul 1>&2 && @echo %%i

So, Phil, Du bist auch so einer (neben den beiden BiBa-Buben), dessen Beiträge mir seit Jahren den Blick auf die Dinge geschärft haben - vielen Dank dafür.

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: bastla
07.05.2012, aktualisiert 18.10.2012
Hallo @All!

Na dann weise ich auch noch mal dezent (so wie da oben) auf eine VBS-Variante hin ...

Grüße
bastla
Bitte warten ..
Mitglied: pieh-ejdsch
07.05.2012 um 16:16 Uhr
moin bastla,

Dann könntest Du ja noch den Hinweis mitgeben, dass dort in der Zeile 3 beim Teilstück
Then If fso.FileExists(D.DriveLetter^&":\PStart.Exe")
nach der Richtigen Datei gesucht werden muss.
Then If fso.FileExists(D.DriveLetter^&":\Backup-LW.txt")
Es geht aber bei mir nicht. Es wird nur C gefunden wenn ich diesen Sring weglasse.

@Mario
(noch) nicht einleuchtet, warum ich die Ausgabe von 'mountvol' auf Netzlaufwerke gegenprüfen sollte;
&net use
Netzlaufwerke werden ergänzt. Ist aber ein guter Hinweis:
In der For Version mit abklappern aller Buchstaben ist nicht von vornherein geklärt, ob es sich um Lokale oder gemappte LW handelt.
Wenn dann noch extra (wie bei Biber) nach zugewiesenen subst LW-Buchstaben gesucht wird, welche Ohnehin schon irgendwo gemountet sein müssen, müsste eine Prüfung auf LW her, welche Lokal schon irgendwie als Pfad vorhanden sind.
Auch bei Netzwerk-LW-Buchstaben.

Ich möchte gern ein Skript vom USB Stick starten und alle Laufwerke rekursiv nach bestimmten Datentypen durchsuchen.
An der Büchse sollten vielleicht nur Lokale LW Durchsucht werden.

Jetzt weiss n3-narf auch wieviele verschiedene Laufwerkstypen von A-Z gefunden werden können.
dass eventuelle per SUBST definierte Laufwerke nicht bemerkt werden.
Zum Glück - Nicht dass mal was doppelt gesichert wird.

Nachtrag:
Sobald in der Forschleife zur existenzPrüfung mit dir oder vol anstatt %%i die For-Variable zu %%~di expandiert wird, erscheint auch die Fehlermeldung: "Es befindet sich kein Datenträger im Laufwerk."

Gruß Phil
Bitte warten ..
Mitglied: bastla
07.05.2012 um 18:13 Uhr
Hallo PH!

Eigentlich war ja der VBS-Teil nur als Ausgangspunkt für die erforderliche Anpassung (und nicht vorrangig für den TE ) gedacht - als fertiger Ansatz etwa:
01.
@echo off & setlocal 
02.
setlocal enabledelayedexpansion 
03.
set "Excl=%~d0" 
04.
for /f "delims=:" %%i in ('subst') do set "Excl=!Excl!%%i" 
05.
endlocal & set "Excl=%Excl%" 
06.
set "G=%temp%\GetDriveLetters.vbs" 
07.
>"%G%" echo Set fso=CreateObject("Scripting.FileSystemObject"):For Each D In fso.Drives:If D.DriveType=2 Then:If D.IsReady Then:WScript.Echo D.DriveLetter:End If:End If:Next 
08.
for /f %%i in ('cscript //nologo "%G%"') do echo %Excl%|findstr /iv %%i>nul && echo %%i
Grüße
bastla

P.S.: Ich weiß, dass es in %Excl% auch einen ":" gibt - aber who cares ...
Bitte warten ..
Ähnliche Inhalte
VB for Applications
Rekursiver Datentyp nicht möglich, Alternativen?
Frage von mabue88VB for Applications4 Kommentare

Hallo, in einem VBA-Programm soll der Inhalt einer HTML-Seite verarbeitet werden. Dafür hätte ich mir gerne eine eigenen Datentyp ...

Batch & Shell
Bestimmte Ordner (auch rekursiv) löschen, Lösung ohne Schleife?
gelöst Frage von chrisdi91Batch & Shell6 Kommentare

Hallo, ich habe mich zwar ein bischen quergelesen und viel gegoogelt, allerdings habe ich nur Lösungen mit eine For ...

Batch & Shell
Bestimmte Ordner rekursiv per Batch löschen
gelöst Frage von TASKnetBatch & Shell5 Kommentare

Hallo zusammen, ich habe folgendes Problem: Eine Radiologie schickt Dateien und Verzeichnisse auf ein gemapptes Laufwerk. Wir haben dort ...

VB for Applications
Dateisuche nach Datentypen (mit Unterordner)
gelöst Frage von Gimli3311VB for Applications5 Kommentare

Hallo Zusammen, Ich brauch eure Hilfe, und zwar soll ich eine Ordnerstruktur nach Daten durchsuchen die den Datentypen *.xls ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 10 StundenLinux1 Kommentar

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 1 TagTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 1 TagSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 1 TagSicherheit9 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Netzwerkgrundlagen
Welches Modem für VDSL 50000 der T-Com
gelöst Frage von Windows10GegnerNetzwerkgrundlagen24 Kommentare

Hallo, ein Kollege von mir will sich VDSL50000 von der T-Com holen, um daran einen Server zu betreiben. Ich ...

Sicherheit
Meltdown und Spectre: Die machen uns alle was vor
Information von FrankSicherheit24 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Ubuntu
Ubuntu - Starter für nicht vertrauenswürdige Anwendungen
Frage von adm2015Ubuntu17 Kommentare

Hallo zusammen, Ich verwende derzeit die Ubuntu Versionen 17.10 bzw. im Test 18.04. Ich habe mehrere .desktop Dateien in ...

Netzwerke
Packet loss bei "InternetLeitungsvollauslastung"
gelöst Frage von Freak-On-SiliconNetzwerke17 Kommentare

Servus; Ja der Titel klingt komisch, is aber so. Wenn die Internetleitung voll ausgelastet ist, hab ich extreme packet ...