ian2000
Goto Top

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.
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.

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

michi1983
michi1983 28.12.2023 aktualisiert um 22:17:18 Uhr
Goto Top
Hallo,

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
@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ß
erikro
Lösung erikro 29.12.2023 um 09:24:44 Uhr
Goto Top
Moin,

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
michi1983
michi1983 29.12.2023 um 09:31:07 Uhr
Goto Top
Quote from @erikro:
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

Gruß
erikro
erikro 29.12.2023 um 09:33:48 Uhr
Goto Top
Zitat von @michi1983:

Quote from @erikro:
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. face-wink Zumindest, sofern es sich vermeiden lässt.
10138557388
Lösung 10138557388 29.12.2023 aktualisiert um 10:21:27 Uhr
Goto Top
Zitat von @erikro:
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
@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  
pj.
erikro
erikro 29.12.2023 um 09:47:02 Uhr
Goto Top
Moin,

Zitat von @10138557388:

Zitat von @erikro:
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. face-wink

Ohne den Stern gibt es sehr wohl Ergebnisse auch ohne -recurse:

1
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
10138557388
10138557388 29.12.2023 aktualisiert um 09:54:52 Uhr
Goto Top
hne den Stern gibt es sehr wohl Ergebnisse auch ohne -recurse:
Oh gut, dann haben sie das nun endlich auch mal gefixt. Danke.
erikro
erikro 29.12.2023 um 09:57:18 Uhr
Goto Top
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 ...

Liebe Grüße

Erik
10138557388
10138557388 29.12.2023 aktualisiert um 10:26:29 Uhr
Goto Top
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
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 ...
erikro
erikro 29.12.2023 um 10:13:57 Uhr
Goto Top
Zitat von @10138557388:

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

Tatsächlich. Ist ja ein Ding! face-wink
Ian2000
Ian2000 29.12.2023 um 10:14:33 Uhr
Goto Top
Hallo,

der erste Code funktioniert, jedoch nur nicht in den Unterordnern.
Ich würde lieber bei batch bleiben.

1
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
    )
)

Kann man den Code noch optimieren für Unterordner? Irgendwie funktioniert der Parameter /r nicht bei for...
10138557388
10138557388 29.12.2023 aktualisiert um 10:27:34 Uhr
Goto Top
Zitat von @erikro:
Tatsächlich. Ist ja ein Ding! face-wink
Da habe ich noch einen, probier mal das
1
"Hallo $('(')"  
Offene Klammer in String in einer Subexpression, schon seit Jahren ein Parserfehler der trotz mehrfacher Meldung nicht gefixt wird ...

Kann man den Code noch optimieren für Unterordner? Irgendwie funktioniert der Parameter /r nicht bei for...
Guckst du mein Batch Code oben.
Ian2000
Ian2000 29.12.2023 um 11:00:06 Uhr
Goto Top
Super, danke, dass funktioniert