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
GELÖST

Skript suche Ordner in Unterordner

Frage Entwicklung Batch & Shell

Mitglied: Eifeladmin

Eifeladmin (Level 1) - Jetzt verbinden

29.11.2013 um 19:17 Uhr, 2799 Aufrufe, 6 Kommentare, 1 Danke

Hallo Community,

ich versuche aktuell ein Skript zu schreiben dem ich einen Pfad übergeben kann und dies dann einen gestimmten String in den Ordner- Namen der Unterordner sucht, wurde der String gefunden soll in diesen Ordner ein Inhalt kopiert werden, danach soll weiter gesucht werden.
Ich hab aber leider überhaupt keinen Ansatz dazu, ich habe bis dato immer nur mit festen Pfaden gearbeitet und weiß nicht wie ich die Pfade einlesen könnte.
Was ich bis jetzt im Internet gefunden habe, war mir nicht so ganz klar.
Hat jemand von Euch eine Idee für mich wie ich das Problem umsetzten könnte?

Viele Dank und Grüße
EA
Mitglied: colinardo
29.11.2013, aktualisiert um 23:39 Uhr
Hallo EA,
Powershell-Variante:
01.
param( 
02.
    [Parameter(Mandatory=$true)]$folderSearch 
03.
04.
$contentToCopy = "C:\Temp\DateiDieKopiertwerdensoll.csv" 
05.
$suchbegriff = "DeinSuchbegriff" 
06.
dir $folderSearch -Recurse | ?{$_.PSIsContainer -and $_.Name -like "*$suchbegriff*"} | %{copy-item $contentToCopy -Destination $_.FullName}
Das Powershellscript wird dann folgendermaßen aufgerufen:
deinscript.ps1 -folderSearch "C:\Suchordner"
Es durchläuft alle Unterordner des Ordners und sucht nach dem Begriff der in der Variablen $suchbegriff steht. Wird dieser gefunden, wird der Inhalt den du in der Variablen $contentToCopy angibst in diesen Ordner kopiert.

Hinweis: Sollten Pfade in dem Suchordner mit dabei sein, welche die max. Zeichenzahl von 248 überschreiten wird das Script einen Fehler auswerfen. Leider hat hier blöder weise die Powershell bzw. das .NET-Framework eine Beschränkung eingebaut

p.s. wenn du noch nie mit Powershell gearbeitet hast, musst du einmalig den folgenden Befehl in einer PS-Console ausführen um PS-Scripte ausführen zu dürfen:
01.
Set-ExecutionPolicy -RemoteSigned
Alternativ eine Variante mit VB-Script:
01.
Set args = WScript.Arguments 
02.
If args.length > 0 Then 
03.
	startFolder = args.Item(0) 
04.
Else 
05.
	WScript.Echo "Es fehlt der Parameter für den Suchordner" 
06.
	WScript.Quit 
07.
End If 
08.
 
09.
'Der String den du suchst 
10.
strSearch = "source" 
11.
'Einzelnes File hineinkopieren 
12.
fileToCopy = "C:\Temp\test.csv" 
13.
'Alternativ einen ganzen Ordner hinein kopieren 
14.
folderToCopy = "C:\TestQuellOrdnermitDateien" 
15.
 
16.
Set fso = WScript.CreateObject("Scripting.Filesystemobject") 
17.
Set rootFolder = fso.GetFolder(startFolder) 
18.
parseFolders rootFolder,True 
19.
 
20.
Function parseFolders(strFldr,boolRecursion) 
21.
	For each folder in strFldr.Subfolders 
22.
		If InStr(1,folder.Name,strSearch,vbTextCompare) > 0 Then 
23.
			fso.CopyFile fileToCopy, folder.Path & "\" 
24.
			' Alternativ Kopieren eines ganzen Ordners 
25.
			'fso.CopyFolder folderToCopy, folder.Path & "\" 
26.
		End If 
27.
	Next 
28.
	 
29.
	If boolRecursion Then 
30.
		For Each subFolder in strFldr.SubFolders 
31.
			parseFolders subFolder, True 
32.
		Next 
33.
	End If 
34.
End Function
Der Aufruf erfolgt hier folgendermaßen:
cscript.exe //NOLOGO deinScript.vbs "C:\Suchpfad"
Du kannst dich hier entscheiden ob du nur eine einzelne Datei oder einen ganzen Ordner in den jeweiligen Zielordner kopieren willst Zeilen 12 oder 14. Dazugehörig die Zeilen 23/25 mit den jeweiligen Kopierbefehlen. Suchstring steht in Zeile 10.

Grüße Uwe
Bitte warten ..
Mitglied: bastla
29.11.2013, aktualisiert 02.12.2013
Hallo Eifeladmin!

Und als Batch (wenn tatsächlich alle Ordner unterhalb des Ausgangsordners - also auch Unter-Unterordner etc) berücksichtigt werden sollen, ungetestet etwa so:
01.
@echo off & setlocal 
02.
set "String=Dein Suchstring" 
03.
set "Inhalt=D:\Ein Inhalt.txt" 
04.
 
05.
for /d /r %1 %%i in (*%String%*) do echo copy "%Inhalt%" "%%i" 
06.
pause
Das "echo" vor dem "copy" simuliert (zum Testen) den Kopiervorgang nur, indem es den Kopierbefehl anzeigt - wenn Du es weglässt, wird tatsächlich kopiert. Die Ausgabe "1 Datei(en) kopiert." kannst Du übrigens mit einem ">nul" am Ende der Zeile verschwinden lassen.

Aufzurufen ist der Batch, wie gewünscht, mit Übergabe des Startordners als Parameter.

Sollte doch nur eine Unterordner-Ebene gemeint sein, die Zeile 5 durch
for /d %%i in ("%~1\*%String%*") do echo copy "%Inhalt%" "%%i"
ersetzen.

Grüße
bastla
Bitte warten ..
Mitglied: Eifeladmin
02.12.2013 um 08:23 Uhr
Hallo colinardo
Hallo bastla

das ist ja wirklich super!
Vielen herzlichen Dank, ich hatte mit ein Tipps gerechnet aber fast fertige Skripts.
Das ist echt super, ich schau es mir gleich an.

Vielen vielen Dank.

Viele Grüße
EA
Bitte warten ..
Mitglied: derhoeppi
04.12.2013 um 09:30 Uhr
Hallo,

nachdem ich erst einen neuen Beitrag eröffnet habe und auf diesen verlinkt wurde, muss ich hier doch noch einmal nachfragen. Ich habe ein Problem beim Durchsuchen von Windows 7 Benutzerprofilen.
Folgende Schleife habe ich bisher in Verwendung:

FOR /F "Tokens=*" %%A in ('dir /B "%APPDATA%\Mozilla\Firefox\Profiles\*.default"') DO set FFPROFILE=%%A

Mein Problem ist nun das ich mit dem Skript nur den aktuellen Benutzer berühre. Da wir jedoch auf den Systemen multiuserfähig sein wollen, möchte ich ebenfalls alle Benutzerprofile erreichen. Ich habe mir nun eine vorgeschaltete Schleife vorgestellt, die mir alle Benutzerprofile mit den Ordnern \Mozilla\Firefox ausgibt und diesen String in den oben vorhandenen String übergeben. Habt ihr einen Tipp für mich?
Bitte warten ..
Mitglied: bastla
04.12.2013, aktualisiert 09.12.2013
Hallo derhoeppi!

Du kannst dafür (und auch für die "*.default"-Ordner) wie oben gezeigt eine "for /d"-Schleife verwenden:
01.
for /d %%u in ("C:\Users\*") do ( 
02.
    FOR /D %%A in ("%%u\APPDATA\Roaming\Mozilla\Firefox\Profiles\*.default") DO set "FFPROFILE=%%A" 
03.
)
Allerdings wirst Du entweder "delayedExpansion" oder ein Unterprogramm oder eine direkte Verarbeitung des gefundenen Pfades über die Varaible %%A benötigen ...

Grüße
bastla

[Edit] Überzähligen Apostroph (vor der schließenden Klammer) entfernt. [/Edit]
Bitte warten ..
Mitglied: derhoeppi
09.12.2013 um 06:59 Uhr
Hallo bastla,

vielen Dank. Ich werde die Schleife gleich einmal testen. Etwas ähnliches habe ich auch getestet, aber das Ergebnis war ähnlich der nun integrierten FOR-Schleife, obwohl es in anderen Benutzerprofilen ebenfalls *.Default-Ordner gibt.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Powershell: Dateien suchen, Ordner, Unterordner
gelöst Frage von internet2107Batch & Shell5 Kommentare

Hallo und guten Morgen. Leider habe ich noch einen Teil 2, den ich irgendwie nicht gelöste bekomme. Dank colinardo ...

Windows 7
Win7: wie Unterordner aus Suche ausschließen?
gelöst Frage von ModellixWindows 711 Kommentare

Moin Admins, in einem Verzeichnis mit X Unterverzeichnissen muss ich nach bestimmten Dateitypen (.drw) suchen. Gebe ich nun im ...

Windows Server
Automatisierter Default-Ordner in jedem Unterordner
gelöst Frage von VoiperWindows Server6 Kommentare

Hallo Zusammen, wir basteln im Unternehmen aktuell unsere Ordnerstruktur um und es kam der Wunsch auf, das in jedem ...

VB for Applications
Ordner + Unterordner durchsuchen
gelöst Frage von Gimli3311VB for Applications11 Kommentare

Guten Tag Zusammen, da bei meinem letzten Problem hier super geholfen wurde, wende ich mich wieder an euch. Was ...

Neue Wissensbeiträge
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 20 StundenViren und Trojaner1 Kommentar

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 23 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 5 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Windows 10
Probleme mit Dateien, deren Pfad + Dateiname länger als 256 Zeichen sind
Frage von FalaffelWindows 1011 Kommentare

Guten Tag, unter Windows 10 scheint es immer noch das Problem zu geben, dass der Pfad + Dateiname einer ...

Vmware
DOS 6.22 in VMWare mit CD-ROM
gelöst Frage von hesperVmware10 Kommentare

Hallo zusammen! Ich hab ein saublödes Problem. Es ist eine VMWare mit DOS 6.22 zu erstellen auf dem ein ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...