Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

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

Powershell: Dateien suchen, Ordner, Unterordner

Frage Entwicklung Batch & Shell

Mitglied: internet2107

internet2107 (Level 1) - Jetzt verbinden

19.10.2014 um 09:55 Uhr, 7684 Aufrufe, 5 Kommentare, 3 Danke

Hallo und guten Morgen.

Leider habe ich noch einen Teil 2, den ich irgendwie nicht gelöste bekomme. Dank @colinardo (Uwe) wurde der Teil 1 sehr gut gelöst, dafür noch mal großen Dank.

Nun habe ich aber noch folgendes Problem.
Wie im Teil 1 bekannt, sollen aus Ordnern und Unterorder bestimmte Dateien gefiltert und entsprechend verarbeitet werden, was ja nun auch wieder klappt.
Nach der Verarbeitung sollen aber die verarbeiteten Dateien entsprechend an einem anderen Ort erstellt werden, inkl. dem Ordner/Unterordner wie an der Quelle.

Beispiel:
Vor der Verarbeitung soll in einem Quellordner, indem sich ca. 10.000 Dateien befinden, inkl. seiner Unterordner nach Dateien vom Typ x gesucht werden, diese werden dann verarbeitet (umgewandelt nach PDF). Das klappt ja auch einwandfrei.
Nur soll am Ziel auch genauso wieder die Ordnerstruktur erstellt werden, inkl. der Unterordner und dort die verarbeiteten Dateien abgelegt werden.

01.
$DATDateien = dir "C:\Temp\test_dat\" -include *.mxa, *.dra, *.log -recurse  
Dieser "test_dat" - Ordner hat ggf. xx Unterordner, indem auch wieder eine Menge Dateien liegen und ggf. verarbeitet werden müssen, sofern sie die Bedingung (Filter) erfüllen.
Dann werden alle gefilterten Dateien in Word geöffnet, dort verarbeitet und als PDF gespeichert. Auch das klappt einwandfrei.

SOLL soll aber sein, dass alle Dateien im Zielordner auch jeweils genauso wieder in Unterordnern erstellt werden

Vielen Dank vorab.
Mitglied: colinardo
19.10.2014, aktualisiert um 11:13 Uhr
Moin internet2107,
auch noch am Sonntag fleißig .

Auf deinen letzten Post bezogen könnt dies so aussehen:
(Kommentare siehe Code)
01.
$sourceRoot = 'c:\deinPfad' 
02.
$targetRoot = 'D:\deinzielPfad' 
03.
dir $path -Include '*.xlsb' -Recurse | %{ 
04.
    # passende DAT Datei suchen 
05.
    $dat = dir "$sourceRoot\$($_.BaseName.Replace('_','-'))*_USED.DAT" -Recurse | select -First 1 
06.
    # wenn eine zur xlsb-Datei passende DAT-Datei gefunden wurde 
07.
    if ($dat){ 
08.
        write-host "Für folgende Datei wurde eine USED-DAT gefunden:"$_.FullName 
09.
         
10.
        # ----------------------------------------------------- 
11.
        # Name des neuen Ordners erstellen indem der Quell-Root durch den Zielroot ersetzt wird 
12.
        $newDir = $_.DirectoryName.Replace($sourceRoot,$targetRoot) 
13.
        # Zielordnerstruktur erstellen 
14.
        new-item -ItemType Directory -Path $newDir -Force 
15.
        # File an seinen neuen Ort kopieren 
16.
        copy-item $_.FullName "$newDir\$($_.Name)" -Force 
17.
        # ----------------------------------------------------- 
18.
19.
}
Das Prinzip ist folgendes: Du ersetzt im Pfadnamen der Datei mit Replace dein Quell-Root mit deinem Zielroot, danach erstellst du diese Ordnerstruktur mit new-item und kopierst deine Datei dorthin, fertig.

Grüße Uwe
Bitte warten ..
Mitglied: internet2107
21.10.2014, aktualisiert um 15:51 Uhr
Lieber Uwe.

Ich baue mir gerade den Code auch zu dieser Seite weiter zusammen.

Eine Frage hierzu.
Wie kann ich die folgende Dateibezeichnung per RegEx soweit beschneiden, dass aus:
T101361_2 (Test 2) (2281695) (2_3h) (19270236).mxa --> T101361_2
wird ?. Es soll also alles was nach dem Leerzeichen vor der ersten Klammer abgeschnitten werden ?
$string -replace '^\s ???????"

Danke im Voraus.
Bitte warten ..
Mitglied: colinardo
21.10.2014, aktualisiert um 16:14 Uhr
z.B. so
$string.Split(" (")[0]
oder so
([regex]'^([^\s\(]+)').Match($string).Value
oder so
$string -replace '^([^\s\(]+).*','$1'
Grüße Uwe
Bitte warten ..
Mitglied: internet2107
21.10.2014 um 19:44 Uhr
Danke für die Antwort oben. Ich komme meinem Ziel näher.
Jedoch muss hier in diesem Code noch irgendwo ein Fehler enthalten sein:

01.
$path = "C:\Temp\test_dat\a" 
02.
$path_pdf = "C:\Temp\test_dat\pdf" 
03.
$path_ziel = "C:\Temp\test_dat\PDF_A_" 
04.
$dateien = gci -path $path -include *.mxa, *.dra, *.log -recurse  
05.
 
06.
<# 
07.
 
08.
..hier findet die Umwandlung der gefilterten Dateien über Word nach PDF statt. 
09.
..$doc.SaveAs([ref]$path_pdf, [ref]17)  
10.
 
11.
#> 
12.
$file_old = $dateien.basename 
13.
$file_new = $file_old -replace '^([^\s\(]+).*','$1' 
14.
foreach ($folder in $file_new)  
15.
{  
16.
New-Item -Type directory $path_ziel$folder -Force 
17.
$a1 = "\*.pdf" 
18.
copy-Item $path_pdf$a1 $path_ziel$folder |  Where-Object  { $dateien -match $folder } 
19.
20.
 
Beschreibung:
Nachdem die gefilterten Dateien über Word als PDF exportiert worden sind, (Word wird zur speziellen Formatierung benutzt), liegen alle PDF zunächst in einem "Sammel"-Ordner. Zur besseren Übersicht soll aber eine Ordnerstruktur erstellt werden. Der Ordner hat jeweils genau denselben Namen wie die ersten Buchstaben der Datei.
Das klappt auch alles soweit.

Am Ende sollen aber die PDFs in die vom Namen passenden Ordner kopiert werden. Hier kopiert er aber aktuell immer alle PDFs in alle Ordner.
Im Klartext:
Es befindet sich am Ende ein PDF im Ordner: "C:\Temp\test_dat\pdf\T101361_2 (Test 2) (2281695) (2_3h) (19270236).pdf"
Dieses PDF soll aber nur in erstellten Ordner: "T101361_2" kopiert werden.
Jedoch befinden sich dort aktuell auch Dateien vom Namen: "T101361_5 (Test 2) (2281695) (2_3h) (19270236).pdf", obwohl die Benennung T101361_5 eigentlich in den Ordner "T101361_5" müsste....

Sieht jemand den Fehler ?
Bitte warten ..
Mitglied: colinardo
21.10.2014, aktualisiert um 23:38 Uhr
01.
$file_old = $dateien.basename 
02.
$file_new = $file_old -replace '^([^\s\(]+).*','$1' | select -unique 
03.
foreach ($folder in $file_new)  
04.
{  
05.
  New-Item -Type directory "$path_ziel\$folder" -Force 
06.
  copy-Item "$path_pdf\$folder*.pdf" "$path_ziel\$folder" 
07.
}
p.s. das angehängte where-object in deiner Zeile 18 ist ein ganz grober Fehler. Da hast du die Powershell und die Pipe noch nicht ganz durchblickt. Gefiltert werden kann immer nur vor einer Aktion ! In diesem Fall geht's aber auch ohne Filter via Wildcard im copy-Befehl.
Bitte warten ..
Ähnliche Inhalte
VB for Applications
gelöst Ordner inkl Dateien und Unterordner mit VBA löschen (4)

Frage von it4baer zum Thema VB for Applications ...

Batch & Shell
gelöst Batchdatei Ordner nach Letztem Datum suchen und Dateien im Unterordner verschieben (13)

Frage von noby.dick zum Thema Batch & Shell ...

Batch & Shell
gelöst Kopieren einer Datei in mehrere Ordner mit PowerShell (7)

Frage von FRANHE zum Thema Batch & Shell ...

Neue Wissensbeiträge
Sicherheit

Kanadischer Geheimdienst veröffentlicht erstmals Sicherheitssoftware

Information von BassFishFox zum Thema Sicherheit ...

Virtualisierung

Docker Monitoring und Steuerung per "sen"

Tipp von Frank zum Thema Virtualisierung ...

Viren und Trojaner

Neues Botnetz über IoT-Geräte

(6)

Information von certifiedit.net zum Thema Viren und Trojaner ...

Heiß diskutierte Inhalte
Windows Installation
Windows 10 neu installieren (18)

Frage von imebro zum Thema Windows Installation ...

Windows 7
Abbruch bei Brennvorgang (16)

Frage von Simulant zum Thema Windows 7 ...

Router & Routing
Externe IP von innen erreichbar machen (15)

Frage von Windows10Gegner zum Thema Router & Routing ...