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.
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-Key: 63196492943

Url: https://administrator.de/contentid/63196492943

Printed on: April 27, 2024 at 12:04 o'clock

Member: michi1983
michi1983 Dec 28, 2023 updated at 21:17:18 (UTC)
Goto Top
Hallo,

mit Powershell:

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:

@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ß
Member: erikro
Solution erikro Dec 29, 2023 at 08:24:44 (UTC)
Goto Top
Moin,

Zitat von @michi1983:
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:

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
Member: michi1983
michi1983 Dec 29, 2023 at 08:31:07 (UTC)
Goto Top
Quote from @erikro:
Besser mit exclude:

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ß
Member: erikro
erikro Dec 29, 2023 at 08:33:48 (UTC)
Goto Top
Zitat von @michi1983:

Quote from @erikro:
Besser mit exclude:

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.
Mitglied: 10138557388
Solution 10138557388 Dec 29, 2023 updated at 09:21:27 (UTC)
Goto Top
Zitat von @erikro:
Besser mit exclude:

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!

Get-ChildItem "C:\Path\To\Your\Folder\*" -Exclude *.jpg -File | select -ExpandProperty Fullname  


Die Batch lässt sich ebenfalls optimieren/vereinfachen

@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.
Member: erikro
erikro Dec 29, 2023 at 08:47:02 (UTC)
Goto Top
Moin,

Zitat von @10138557388:

Zitat von @erikro:
Besser mit exclude:

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:

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
Mitglied: 10138557388
10138557388 Dec 29, 2023 updated at 08:54:52 (UTC)
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.
Member: erikro
erikro Dec 29, 2023 at 08:57:18 (UTC)
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
Mitglied: 10138557388
10138557388 Dec 29, 2023 updated at 09:26:29 (UTC)
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
Get-Childitem "C:\Users\xxx\test" -File -exclude *.jpg  

Wobei das a folgende aber auch Ordner ausschließt, insofern ist er nicht nötig
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 ...
Member: erikro
erikro Dec 29, 2023 at 09:13:57 (UTC)
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
Member: Ian2000
Ian2000 Dec 29, 2023 at 09:14:33 (UTC)
Goto Top
Hallo,

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

@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...
Mitglied: 10138557388
10138557388 Dec 29, 2023 updated at 09:27:34 (UTC)
Goto Top
Zitat von @erikro:
Tatsächlich. Ist ja ein Ding! face-wink
Da habe ich noch einen, probier mal das
"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.
Member: Ian2000
Ian2000 Dec 29, 2023 at 10:00:06 (UTC)
Goto Top
Super, danke, dass funktioniert