Alles, außer eine Dateiendung bei for Schleife
Hallo,
ich habe mir einige Automatisierungen zusammengestellt. Funktioniert super, möchte jedoch einen einzigen Dateityp ausschließen. Beispielsweise jpg
Codeausschnitt um dem es geht. Da steht sonst noch mehr hinter was getan werden soll, bei der Auswahl. Aber das sollte hier unrelevant sein.
Der Teil *.* stellt ja dar, dass alle Dateien verarbeitet werden sollen. Nur wie kann ich definieren: Alles außer jpg ? Komme hier nicht weiter.
ich habe mir einige Automatisierungen zusammengestellt. Funktioniert super, möchte jedoch einen einzigen Dateityp ausschließen. Beispielsweise jpg
Codeausschnitt um dem es geht. Da steht sonst noch mehr hinter was getan werden soll, bei der Auswahl. Aber das sollte hier unrelevant sein.
1
for /r "E:\Pfad\Pfa" %%i in ("*.*") do
Der Teil *.* stellt ja dar, dass alle Dateien verarbeitet werden sollen. Nur wie kann ich definieren: Alles außer jpg ? Komme hier nicht weiter.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 63196492943
Url: https://administrator.de/forum/alles-ausser-eine-dateiendung-bei-for-schleife-63196492943.html
Ausgedruckt am: 03.04.2025 um 14:04 Uhr
13 Kommentare
Neuester Kommentar
Hallo,
mit Powershell:
Mit Batch:
Gruß
mit Powershell:
1
Get-ChildItem "C:\Path\To\Your\Folder" | Where-Object { $_.Extension -ne '.jpg' } | ForEach-Object { Write-Host "Processing file: $($_.FullName)"; # Add your processing code here }
Mit Batch:
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
@echo off
setlocal EnableDelayedExpansion
set "folderPath=C:\Path\To\Your\Folder"
for %%F in ("%folderPath%\*") do (
if /I not "%%~xF"==".jpg" (
echo Processing file: %%~dpnxF
REM Add your processing code here
)
)
Gruß
Moin,
Besser mit exclude:
Liebe Grüße
Erik
Zitat von @michi1983:
1
Get-ChildItem "C:\Path\To\Your\Folder" | Where-Object { $_.Extension -ne '.jpg' } | ForEach-Object { Write-Host "Processing file: $($_.FullName)"; # Add your processing code here }
Besser mit exclude:
1
Get-ChildItem "C:\Path\To\Your\Folder" -exclude "*.jpg" | ForEach-Object { Write-Host "Processing file: $($_.FullName)"; # Add your processing code here }
Liebe Grüße
Erik
Quote from @erikro:
Besser mit exclude:
Besser mit exclude:
1
Get-ChildItem "C:\Path\To\Your\Folder" -exclude "*.jpg" | ForEach-Object { Write-Host "Processing file: $($_.FullName)"; # Add your processing code here }
Moin,
aus performance Gründen?
Liebe Grüße
Erik
Erik
Gruß
Zitat von @michi1983:
Moin,
aus performance Gründen?
Quote from @erikro:
Besser mit exclude:
Besser mit exclude:
1
Get-ChildItem "C:\Path\To\Your\Folder" -exclude "*.jpg" | ForEach-Object { Write-Host "Processing file: $($_.FullName)"; # Add your processing code here }
Moin,
aus performance Gründen?
Ja. Hole nie Daten, die Du nicht brauchst.

Zitat von @erikro:
Besser mit exclude:
Besser mit exclude:
1
Get-ChildItem "C:\Path\To\Your\Folder" -exclude "*.jpg" | ForEach-Object { Write-Host "Processing file: $($_.FullName)"; # Add your processing code here }
Ohne den Schalter -Recurse muss man das Sternchen am Pfadende angeben sonst gibt es bei der Verwendung von -exclude oder -include mit dem Parameter -File kein Ergebnis! Des weiteren fehlt die Einschränkung auf Dateien sonst werden enthaltene Ordner mit ausgegeben und nicht nur Dateien!
1
Get-ChildItem "C:\Path\To\Your\Folder\*" -Exclude *.jpg -File | select -ExpandProperty Fullname
Die Batch lässt sich ebenfalls optimieren/vereinfachen
1
2
3
2
3
@echo off
set "folder=C:\Path\To\Your\Folder"
for /f "delims=" %%a in ('dir /b /s /a-d "%folder%" ^|findstr /ievc:"\.jpg"') do echo %%a
Moin,
Das eine stimmt, das andere nicht.
Ohne den Stern gibt es sehr wohl Ergebnisse auch ohne -recurse:
Bei der Bemerkung, dass man auf Dateien mit -file einschränken sollte, hast Du allerdings recht.
Liebe Grüße
Erik
Zitat von @10138557388:
Achtung, hier sind gleich mehrere Fehler drin ... Ohne den Schalter -Recurse muss man das Sternchen am Pfadende angeben sonst gibt es bei der Verwendung von -exclude oder -include kein Ergebnis! Des weiteren fehlt die Einschränkung auf Dateien sonst werden enthaltene Ordner mit ausgegeben und nicht nur Dateien!
Zitat von @erikro:
Besser mit exclude:
Besser mit exclude:
1
Get-ChildItem "C:\Path\To\Your\Folder" -exclude "*.jpg" | ForEach-Object { Write-Host "Processing file: $($_.FullName)"; # Add your processing code here }
Achtung, hier sind gleich mehrere Fehler drin ... Ohne den Schalter -Recurse muss man das Sternchen am Pfadende angeben sonst gibt es bei der Verwendung von -exclude oder -include kein Ergebnis! Des weiteren fehlt die Einschränkung auf Dateien sonst werden enthaltene Ordner mit ausgegeben und nicht nur Dateien!
Das eine stimmt, das andere nicht.
Ohne den Stern gibt es sehr wohl Ergebnisse auch ohne -recurse:
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
get-childitem c:\users\XXX\Downloads\ -exclude *.exe
Verzeichnis: C:\users\XXX\Downloads
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 21.09.2023 13:30 1881 Log_Viewer (1).csv
-a---- 21.09.2023 13:30 1881 Log_Viewer.csv
Bei der Bemerkung, dass man auf Dateien mit -file einschränken sollte, hast Du allerdings recht.
Liebe Grüße
Erik

hne den Stern gibt es sehr wohl Ergebnisse auch ohne -recurse:
Oh gut, dann haben sie das nun endlich auch mal gefixt. Danke.Zitat von @10138557388:
hne den Stern gibt es sehr wohl Ergebnisse auch ohne -recurse:
Oh gut, dann haben sie das nun endlich auch mal gefixt.Nein, das verwechselst Du. Es ist so:
-Exclude
Specifies an array of one or more string patterns to be matched as the cmdlet gets child items. Any matching item is excluded from the output. Enter a path element or pattern, such as *.txt or A*. Wildcard characters are accepted.
A trailing asterisk (*) in the Path parameter is optional. For example, -Path C:\Test\Logs or -Path C:\Test\Logs\*. If a trailing asterisk (*) is included, the command recurses into the Path parameter's subdirectories. Without the asterisk (*), the contents of the Path parameter are displayed. More details are included in Example 5 and the Notes section.
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell ...Specifies an array of one or more string patterns to be matched as the cmdlet gets child items. Any matching item is excluded from the output. Enter a path element or pattern, such as *.txt or A*. Wildcard characters are accepted.
A trailing asterisk (*) in the Path parameter is optional. For example, -Path C:\Test\Logs or -Path C:\Test\Logs\*. If a trailing asterisk (*) is included, the command recurses into the Path parameter's subdirectories. Without the asterisk (*), the contents of the Path parameter are displayed. More details are included in Example 5 and the Notes section.
Liebe Grüße
Erik

Habe das Verwechselt der Bug mir dem -File Parameter ist noch vorhanden. Wenn man diesen mit angibt gibt es bei dieser Variante ohne Sternchen kein Ergebnis
Wobei das a folgende aber auch Ordner ausschließt, insofern ist er nicht nötig
Trotzdem unschön das es dann wenn man "-File" setzt keine Ergebnisse gibt.
Veranschaulichung
https://tio.run/##rc@xCsIwEAbgvU9xdCym7q7SioNQ8AVMk7OJXJOQXLGC714riAg6qT ...
1
Get-Childitem "C:\Users\xxx\test" -File -exclude *.jpg
Wobei das a folgende aber auch Ordner ausschließt, insofern ist er nicht nötig
1
Get-Childitem "C:\Users\xxx\test" -exclude *.jpg
Trotzdem unschön das es dann wenn man "-File" setzt keine Ergebnisse gibt.
Veranschaulichung
https://tio.run/##rc@xCsIwEAbgvU9xdCym7q7SioNQ8AVMk7OJXJOQXLGC714riAg6qT ...

Da habe ich noch einen, probier mal das
Offene Klammer in String in einer Subexpression, schon seit Jahren ein Parserfehler der trotz mehrfacher Meldung nicht gefixt wird ...
1
"Hallo $('(')"
Kann man den Code noch optimieren für Unterordner? Irgendwie funktioniert der Parameter /r nicht bei for...
Guckst du mein Batch Code oben.