joe65
Goto Top

Keine Kopie von Dateien, die einen Unterstrich in der Dateierweiterung haben.

Hallo,

ich möchte über ein Batch Script Dateien kopieren.
Dateien, die eine bestimmte Erweiterung haben (z.B. *.zip) möchte ich nicht kopieren.
Diese Dateierweiterungen habe ich in der Datei "nocopy.txt" angegeben.
Das ganze funktioniert auch.

xcopy "%Quelle1%\*.*" "%Ziel1%" /s /y /i /d /r /exclude:nocopy.txt  

Mein Problem:
Ich möchte auch Dateien, die einen Unterstrich [_] in der Erweiterung haben nicht kopieren.
z.B.:
*.xls_
*.txt_20130814
*.docx_old
also immer wenn nach der eigentlichen Dateierweiterung noch ein Unterstrich folgt.
Dabei ist völlig egal was nach dem Unterstrich folgt, d.h. es kann auch nichts mehr folgen.
Letzlich sollen alle Dateien nicht kopiert werden, in deren Erweiterung ein Unterstrich vorkommt.
Wie muss hierzu der Eintrag in "nocopy.txt" lauten?

Content-ID: 214412

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

Ausgedruckt am: 25.11.2024 um 17:11 Uhr

Endoro
Endoro 15.08.2013 aktualisiert um 21:45:24 Uhr
Goto Top
Hallo, du kannst mal das versuchen:
dir /b "%Quelle1%\*.*_*">nocopy2.txt  
xcopy "%Quelle1%\*" "%Ziel1%" /syidr /exclude:nocopy.txt+nocopy2.txt  
lg.
bastla
bastla 15.08.2013 um 22:56:51 Uhr
Goto Top
@ Endoro
Damit die Liste komplett (es sollen ja auch Unterordner kopiert werden), aber nicht zu umfangreich wird, vielleicht besser
for /f "delims=" %%i in ('dir /s/b/a-d "%Quelle1%\*.*_*"') do >>nocopy2.txt echo %%~xi
Alternative: Kopieren und danach
del /s /q "%Ziel1%\*.*_*"
- könnte aber bei schreibgeschützten / versteckten / System-Dateien etwas mehr Aufwand erfordern ...

Grüße
bastla
Endoro
Endoro 15.08.2013 um 23:31:28 Uhr
Goto Top
@bastla
Super Idee mit den Extensions. (steht auch in der Hilfe, man müsste die nur mal lesen face-smile)
lg.
colinardo
colinardo 16.08.2013 aktualisiert um 11:07:57 Uhr
Goto Top
Hi @bastla und @Endoro,
das Problem mit eurem Filter *.*_* ist, das wenn im Dateinamen Punkte und Unterstriche vorkommen diese Dateien auch nicht mitkopiert werden.
Beispiel:
Quartal.Q3_10.xls

man müsste die Liste für die Schleife mit Findstr ausfiltern:
ungetestet etwa so:
'dir /s/b/a-d "%Quelle1%\*.*" ^| Findstr /r /v ".*\.[^^\._]*$"'

Grüße Uwe
bastla
bastla 16.08.2013 aktualisiert um 08:59:11 Uhr
Goto Top
@ colinardo
Schon klar - und wenn schon "findstr", dann noch ein zweites, um Dubletten in der "nocopy2.txt" zu vermeiden und diese kürzer zu halten, also etwa
... do findstr /ix "%%~xi" nocopy2.txt>nul || >>"nocopy2.txt" echo %%~xi
Grüße
bastla
Endoro
Endoro 16.08.2013 aktualisiert um 16:32:03 Uhr
Goto Top
Hallo,
(FOR /f "delims=" %%a IN ('dir /b /s "%Quelle1%\*.*_*"') DO FOR /f "delims=_" %%b IN ("%%~xa") DO IF "%%~xa" neq "%%~xb" ECHO %%~xa)>nocopy2.txt  
xcopy "%Quelle1%\*" "%Ziel1%" /syidr /exclude:nocopy.txt+nocopy2.txt  
lg.

PS: @bastla danke schön face-smile €.
bastla
bastla 16.08.2013 um 11:18:29 Uhr
Goto Top
@ Endoro
Auch schön face-smile - wobei ich immer noch zumindest ein "/s" für "dir" verwenden würde ...

Grüße
bastla
joe65
joe65 20.08.2013 um 19:57:54 Uhr
Goto Top
Hallo,

Danke für eure Hilfe. An den Fall mit Punkt und Unterstrich im Dateinamen hatte ich gar nicht gedacht.
Ist aber gut zu wissen wie sowas zu lösen ist.

Viele Grüße Joe65