killtec
Goto Top

Suche einer Bestimmten Datei in einem Laufwerk - Ausgabe des obersten Verzeichnisses

Hallo zusammen,
ich möchte ich einem Laufwerk nach einem bestimmten Dateityp suchen. Die Suche soll mir jedoch nur den obersten Ordner anzeigen, wo sich die Datei befindet.

Bsp.:
D:\
- Verz1
- Verz 1.1
- Verz 1.1.1
- Verz2
- Verz 3
- Verz 3.1

Die Dateien befinden Sich Bsp in Verz 1.1, Verz 1.1.1 und 3.1 Die Suche soll mir dann das oberste Verzeichnis ausgeben. Sprich due Ausgabe soll dann ergeben:
D:\Verz1.1
D:\Verz3.1

Das ganze soll auf einem Win7 x64 funktionieren. Kann ich hier was mit der powershell realisieren? Oder geht das mit einem einfachen "dir" in der cmd?

Danke.

Gruß

Content-Key: 243366

Url: https://administrator.de/contentid/243366

Printed on: April 23, 2024 at 15:04 o'clock

Member: Gersen
Gersen Jul 11, 2014 at 08:32:44 (UTC)
Goto Top
Hallo,

so etwa (am Beispiel von TXT):

for /f "tokens=1,2 delims=\" %a in ('dir /B /S *.txt') do echo %a\%b  

Gruß,
Gersen
Member: killtec
killtec Jul 11, 2014 updated at 08:46:37 (UTC)
Goto Top
Hi Gersen,
funktioniert leider nicht.
"a\b" kann syntaktisch an dieser Stelle nicht verarbeitet werden.  


Habe deinen Code einfach in eine Batch gepackt und im Verzeichnis ausgeführt.

Gruß
Member: Gersen
Gersen Jul 11, 2014 at 08:50:51 (UTC)
Goto Top
Hi,

von der Kommandozeile schon... Wenn Du es innerhalb einer Batch-Datei aufrufen willst:

for /f "tokens=1,2 delims=\" %%a in ('dir /B /S *.txt') do echo %%a\%%b  

Gruß,
Gersen
Member: killtec
killtec Jul 11, 2014 at 09:12:05 (UTC)
Goto Top
Ja, so funktioniert es, gibt aber blöderweise nicht das richtige aus...
Bsp.:
D:\tmp\vztest>dir /b/s *.txt
D:\tmp\vztest\vt1\Neues Textdokument.txt
D:\tmp\vztest\vt1\vz2\Neues Textdokument.txt
D:\tmp\vztest\vz2\vz21\vz22\Neues Textdokument.txt
Ausgabe mit For.:
D:\tmp\vztest>for /F "tokens=1,2 delims=\" %a in ('dir /B /S *.txt') do echo %a\  
%b

D:\tmp\vztest>echo D:\tmp
D:\tmp

D:\tmp\vztest>echo D:\tmp
D:\tmp

D:\tmp\vztest>echo D:\tmp
D:\tmp

Gedacht ist, dass die Ausgabe dann so aussähe:
D:\tmp\vztest\vt1
D:\tmp\vztest\vz2\vz21\

Gruß
Member: colinardo
colinardo Jul 11, 2014 updated at 11:03:46 (UTC)
Goto Top
Moin,
probiers mal mit folgendem Powershell-Script:
$pfad = 'D:\Test'  
$filename = 'test.txt'  
$script:dirs = @()
function recurseFunc($folder){
    if ((Test-Path "$folder\$filename")){  
        $script:dirs +=$folder
    }else{
        $subfolders = dir $folder | ?{$_.PSIsContainer}
        $subfolders | %{recurseFunc $_.FullName}
    }
}
recurseFunc $pfad
$script:dirs
Grüße Uwe

p.s. schieb den Beitrag besser in die Kategorie Entwicklung > Shell/Batch
Member: killtec
killtec Jul 11, 2014 at 10:54:43 (UTC)
Goto Top
Hi Colinardo,
das funktioniert leider nicht:
PS D:\tmp\vztest> .\test.ps1
Skriptfehler aufgrund eines Überlaufs der Aufruftiefe. Die Aufruftiefe hat 1001
 erreicht. Der Höchstwert lautet 1000.
    + CategoryInfo          : InvalidOperation: (1001:Int32) , ParentContain
   sErrorRecordException
    + FullyQualifiedErrorId : CallDepthOverflow

PS D:\tmp\vztest>

Gruß
Member: colinardo
colinardo Jul 11, 2014 updated at 10:57:04 (UTC)
Goto Top
hab ich mir schon gedacht das das kommt face-wink, Script ist nicht für ganze Festplatten und Verzeichnisse mit extremer Tiefe geeignet ...
Member: killtec
killtec Jul 11, 2014 at 10:59:24 (UTC)
Goto Top
Hi,
nee, hab was übersehen... Habe die Variablen Pfad und Filename nicht angepasst face-sad
Habs erstmal über ein Testverzeichnis gejagt, da hats geklappt. Teste es nachehr noch auf dem Zielsystem.
Denke das es klappt face-smile
Kann ich das noch in eine Ausgabe umleiten?

Gruß
Member: colinardo
colinardo Jul 11, 2014 updated at 11:04:40 (UTC)
Goto Top
Zitat von @killtec:
Kann ich das noch in eine Ausgabe umleiten?
yip, wenn du es in ein File umleiten willst, schreib am Ende folgendes rein.
$script:dirs | set-content 'C:\out.txt'
Member: killtec
killtec Jul 11, 2014 at 11:07:48 (UTC)
Goto Top
Danke dir face-smile
Teste das nachher und gebe eine Rückmeldung dazu.

Gruß
Member: Gersen
Gersen Jul 11, 2014 updated at 18:36:12 (UTC)
Goto Top
Gut - dann habe ich wohl die Aufgabe falsch verstanden...
Member: iTesla
iTesla Jul 12, 2014 at 17:27:10 (UTC)
Goto Top
.. ich verwende Everything Search Engine .. da es eine wirkliche rasant schnelle Suche ist ..
http://www.voidtools.com/