CMD BAT Dateien verarbeiten
Hallo zusammen,
folgendes Problem bzw. folgende Herausforderung habe ich.
Ich habe ca. 2000 TXT Dateien welche ich zusammenführen will.
Jede Datei setzt sich im Dateinamen wie folgt zusammen %USERNAME%_%HOSTENAME%.txt und beinhaltet eine Liste von Netzwerkdruckern.
Jetzt möchte ich natürlich nicht 2000 Dateien Stück für Stück analysieren sonder will alle in eine Datei zusammenführen.
Wie bekomme ich den Dateinamen (bzw. 2000) in eine neue Textdatei?
Des Weiteren soll nicht nur der Dateiname, sondern auch der Inhalt bzw. der Druckername mitgenommen werden.
Bsp.:
Max_PC1.TXT
Peter_PC2.TXT
--> Neue Datei (Name egal) mit Inhalt:
Max_PC \\Druckserver\Drucker1
Peter_PC2 \\Druckserver\Drucker2
Hoffe es ist verständlich beschrieben.
Viele Grüße,
Olli
folgendes Problem bzw. folgende Herausforderung habe ich.
Ich habe ca. 2000 TXT Dateien welche ich zusammenführen will.
Jede Datei setzt sich im Dateinamen wie folgt zusammen %USERNAME%_%HOSTENAME%.txt und beinhaltet eine Liste von Netzwerkdruckern.
Jetzt möchte ich natürlich nicht 2000 Dateien Stück für Stück analysieren sonder will alle in eine Datei zusammenführen.
Wie bekomme ich den Dateinamen (bzw. 2000) in eine neue Textdatei?
Des Weiteren soll nicht nur der Dateiname, sondern auch der Inhalt bzw. der Druckername mitgenommen werden.
Bsp.:
Max_PC1.TXT
Peter_PC2.TXT
--> Neue Datei (Name egal) mit Inhalt:
Max_PC \\Druckserver\Drucker1
Peter_PC2 \\Druckserver\Drucker2
Hoffe es ist verständlich beschrieben.
Viele Grüße,
Olli
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 392497
Url: https://administrator.de/contentid/392497
Ausgedruckt am: 26.11.2024 um 02:11 Uhr
9 Kommentare
Neuester Kommentar
Moin,
mangels vollständiger™ Beispiele: nein!
Gruß
mangels vollständiger™ Beispiele: nein!
Gruß
Hallo,
In einer CMD dann copy /b Datei.txt+Datei2.txt+Datei3.txt ... +Datei2000.txt DateiZiel.txt
Gruß,
Peter
In einer CMD dann copy /b Datei.txt+Datei2.txt+Datei3.txt ... +Datei2000.txt DateiZiel.txt
Gruß,
Peter
Hallo Steffen,
sollten das nicht 4 backslash sein anstatt 8?
Ich würde ja hier eher zu PowerShell greifen:
Mit dieser Ausgabe (resp in einer .csv Datei)
sollten das nicht 4 backslash sein anstatt 8?
Ich würde ja hier eher zu PowerShell greifen:
## Q:\Test\2018\11\12\AD_392497.ps1
$Data = Get-ChildItem *_*.txt| ForEach-Object {
$User,$Comp = $_.BaseName.split('_.')[0,1]
Select-String -Path $_.FullName -Pattern '\\\\' | ForEach-Object {
[PSCustomObject]@{
User = $User
Computer = $Comp
Printer = ($_.Line -split ' +')[1]
}
}
}
$Data
$Data | Export-Csv .\UserComputerPrinterList.csv -NoTypeInformation
Mit dieser Ausgabe (resp in einer .csv Datei)
User Computer Printer
---- -------- -------
Max PC1 \\Prinserver1\PRT1
Peter PC2 \\Prinserver1\PRT121
Hallo LotPings
lange nicht mehr gelesen
Grüße
Steffen
lange nicht mehr gelesen
Zitat von @77559:
sollten das nicht 4 backslash sein anstatt 8?
Dachte ich auch erst, matcht dann aber auch die einfachen Backslashes in der ersten Zeile. FINDSTR ist verbugt und vermutlich kommt hier noch hinzu, dass es innerhalb der FOR /F Schleife in einer additionellen cmd Instanz im Kommandozeilenmodus ausgeführt wird. FIND wäre vermutlich einfacher zu verstehen gewesen, à lasollten das nicht 4 backslash sein anstatt 8?
... in ('^<"%%~i" find "\\"') do ...
Grüße
Steffen
Hallo ITShark,
das Pattern mit Capture Group und die Ausgabe derselben sieht dann ganz anders aus:
Die RegEx nutzt einen positiven lookahead und nimmt den Text zwischen einem doppelten backslash und dem ersten Leerzeichen oder dem Zeilenende
das Pattern mit Capture Group und die Ausgabe derselben sieht dann ganz anders aus:
## Q:\Test\2018\11\12\AD_392497.ps1
$Data = Get-ChildItem *_*.txt| ForEach-Object {
$User,$Comp = $_.BaseName.split('_.')[0,1]
Select-String -Path $_.FullName -Pattern '(\\\\.*?)(?=( |$))' | ForEach-Object {
[PSCustomObject]@{
User = $User
Computer = $Comp
Printer = $_.Matches.Groups[1].Value
}
}
}
$Data
$Data | Export-Csv .\UserComputerPrinterList.csv -NoTypeInformation
Die RegEx nutzt einen positiven lookahead und nimmt den Text zwischen einem doppelten backslash und dem ersten Leerzeichen oder dem Zeilenende