Dateiendung mit Wildcard?
.auf.* als Wildcard in einer Batch?
Hallo Leute,
mit der hier zu lesenden Hilfe auf administrator.de habe ich bereits eine Datei soweit zurechtstricken können, jedoch nicht wirklich so, wie ich es brauche. Und zwar geht es darum, dass ich einen Ordner habe, der n Unterordner haben kann, in denen Dateien liegen. Nun brauche ich alle Dateien, die nicht auf eine bestimmte Dateiendung lauten, dazu habe ich ein prima Script hier gefunden, und es auch soweit genutzt. Jedoch geht es bei mir noch ein Stück weiter: Die Dateien haben als Endung immer .auf. + eine 9-stellige Zahl. Nun habe ich mir gedacht, nutze ich doch einfach die Wildcard, sprich set "ext=.auf.*", aber das funktionierte nicht, also habe ich versucht, es unten in der Zeile mit zu übergeben, aber das funktioniert auch nicht.
Daher hier die Frage: Kann ich das mit übergeben, oder geht das garnicht? Oder wie könnte ich das Realisieren?
Vielen Dank,
Saschbert
Hallo Leute,
mit der hier zu lesenden Hilfe auf administrator.de habe ich bereits eine Datei soweit zurechtstricken können, jedoch nicht wirklich so, wie ich es brauche. Und zwar geht es darum, dass ich einen Ordner habe, der n Unterordner haben kann, in denen Dateien liegen. Nun brauche ich alle Dateien, die nicht auf eine bestimmte Dateiendung lauten, dazu habe ich ein prima Script hier gefunden, und es auch soweit genutzt. Jedoch geht es bei mir noch ein Stück weiter: Die Dateien haben als Endung immer .auf. + eine 9-stellige Zahl. Nun habe ich mir gedacht, nutze ich doch einfach die Wildcard, sprich set "ext=.auf.*", aber das funktionierte nicht, also habe ich versucht, es unten in der Zeile mit zu übergeben, aber das funktioniert auch nicht.
Daher hier die Frage: Kann ich das mit übergeben, oder geht das garnicht? Oder wie könnte ich das Realisieren?
@echo off & setlocal
set "Ordner=E:\Allgemein\Daten\TA1\NEUE_Dateien"
set "ext=auf"
set "Liste=E:\Allgemein\Daten\TA1\NEUE_Dateien\uebersehene_Dateien.txt"
goto MAIN
:MAIN
rem Abfrage, ob die Suche gestartet werden soll.
cls
echo.
echo ####################################
echo # Achtung: #
echo # -------- #
echo # Die Suche dauert ca. 30 Minuten! #
echo ####################################
echo.
echo.
choice /c jn /m "Soll die Suche getartet werden? "
if errorlevel 2 goto VORZEITIG
if errorlevel 1 goto LOESCHEN
if errorlevel 255 goto FEHLER
:LOESCHEN
rem Alte TXT-Liste löschen, wenn vorhanden.
echo.
echo.
echo Alte Suchliste wird geloescht ...
if exist "%Liste%" del "%Liste%"
echo.
echo Alte Suchliste geloescht!
goto SUCHE
:SUCHE
rem Die Suchfunktion, die die Werte in die Liste schreibt
echo.
echo.
echo Suche nach Dateien laeuft ...
for /f %%i in ('time /t') do set startZeit=%%i
echo Suche gestartet um %startZeit%
for /f "delims=" %%i in ('dir /b /s /a-d "%Ordner%"') do if /i "%%~xi" neq ".%ext%.*" echo %%i >>"%Liste%"
echo.
for /f %%i in ('time /t') do set endZeit=%%i
echo Suche nach Dateien beendet, Liste geschrieben um %endzeit%
goto ENDE
:VORZEITIG
rem Bei Abbruch der Suche
echo.
echo.
echo.
echo Verarbeitung abgebrochen. Zum schliessen des Fensters beliebige druecken.
echo.
echo.
pause
goto eof
:ENDE
rem Ende des Batchfiles
echo.
echo.
echo.
echo Verarbeitung beendet. Zum schliessen des Fensters beliebige druecken.
echo.
echo.
pause
goto eof
Vielen Dank,
Saschbert
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 69357
Url: https://administrator.de/forum/dateiendung-mit-wildcard-69357.html
Ausgedruckt am: 23.12.2024 um 12:12 Uhr
11 Kommentare
Neuester Kommentar
Moin Saschbert,
Du kommst dem vermeintlichen Fehler schneller am CMD-Prompt auf die Spur.
Wie hoffentlich zu sehen ist,
Also STREICHE:
SETZE:
Grüße
Biber
P.S. "neq" ist in der Tat neudeutsch für "ungleich".
Die anderen stehen unter der Hilfe zu IF ("If /?" am CMD-Prompt).
Du kommst dem vermeintlichen Fehler schneller am CMD-Prompt auf die Spur.
>echo bsss>test.auf.12344
>dir /b *.auf.*
test.auf.12344
C:\Dokumente und Einstellungen\Biber>for %i in (*.auf.*) do @echo [%~ni] [%~xi]
[test.auf] [.12344]
Wie hoffentlich zu sehen ist,
- ist nicht etwa "test" der Name der Datei, sondern "test.auf"
- und nicht ".auf.12344" die eXtension, sondern ".12344".
Also STREICHE:
for /f "delims=" %%i in ('dir /b /s /a-d "%Ordner%"') do if /i "%%~xi" neq ".%ext%.*" echo %%i >>"%Liste%"
for /f "delims=" %%i in ('dir /b /s /a-d "%Ordner%\*.%ext%.*"') do @echo %%i >>"%Liste%"
Grüße
Biber
P.S. "neq" ist in der Tat neudeutsch für "ungleich".
Die anderen stehen unter der Hilfe zu IF ("If /?" am CMD-Prompt).
Moin Saschbert,
sorry, dann hatte ich zu unaufmerksam gelesen.
Jetzt habe ich es aber verstanden (glaube ich).
Also dann quäle dich bitte noch mal an den CMD-Prompt.
Wir nehmen den XCOPY-Befehl.
[CMD-Prompt]
Der zweite Befehl sollte als vollwertiger Ersatz für Dein DIR-Konstrukt dienen.
Denn der listet alle Dateien außer den *.auf*-Dateien auf.
Grüße
Biber
sorry, dann hatte ich zu unaufmerksam gelesen.
Jetzt habe ich es aber verstanden (glaube ich).
Also dann quäle dich bitte noch mal an den CMD-Prompt.
Wir nehmen den XCOPY-Befehl.
[CMD-Prompt]
echo *.auf.*>%temp%\exclude.lst
xcopy . %temp%\egal\ /Exclude:%temp%\exclude.lst /L [sonstigeXCopy-Parameter]
Der zweite Befehl sollte als vollwertiger Ersatz für Dein DIR-Konstrukt dienen.
Denn der listet alle Dateien außer den *.auf*-Dateien auf.
Grüße
Biber
Moin Saschbert,
die Wurzel allen Übels heißt wieder mal M$....- denen musst Du es noch langsamer erklären.
Funktionieren tut es (anscheinend) doch nicht so zuverlässig mit Wildcards, dafür aber so:
1. Eine Positiv-Liste mit "Dir /s /b" erzeugen.
2. Diese als EXCLUDE-Liste benutzen.
Beim unteren XCopy-Ergebnis ist dann keine *.auf.*-Datei mehr dabei.
Wichtig scheint zu sein, dass -da ja in der mit TYPE angezeigten Liste auch der volle Pfad steht- beim XCopy /L -Befehl auch derselbe Pfad ("D:\Temp\") explizit mit angegeben wird.
Grüße
Biber
die Wurzel allen Übels heißt wieder mal M$....- denen musst Du es noch langsamer erklären.
Funktionieren tut es (anscheinend) doch nicht so zuverlässig mit Wildcards, dafür aber so:
1. Eine Positiv-Liste mit "Dir /s /b" erzeugen.
2. Diese als EXCLUDE-Liste benutzen.
>dir /s /b .\*.auf.*>exclude.lst
(=12:34:54 D:\temp=)
>type exclude.lst
D:\temp\test.auf.12345678
(=12:35:07 D:\temp=)
>xcopy d:\temp\test*.* c:\temp /Exclude:exclude.lst /L /s
Beim unteren XCopy-Ergebnis ist dann keine *.auf.*-Datei mehr dabei.
Wichtig scheint zu sein, dass -da ja in der mit TYPE angezeigten Liste auch der volle Pfad steht- beim XCopy /L -Befehl auch derselbe Pfad ("D:\Temp\") explizit mit angegeben wird.
Grüße
Biber