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-Key: 214412

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

Printed on: April 25, 2024 at 05:04 o'clock

Member: Endoro
Endoro Aug 15, 2013 updated at 19:45:24 (UTC)
Goto Top
Hallo, du kannst mal das versuchen:
dir /b "%Quelle1%\*.*_*">nocopy2.txt  
xcopy "%Quelle1%\*" "%Ziel1%" /syidr /exclude:nocopy.txt+nocopy2.txt  
lg.
Member: bastla
bastla Aug 15, 2013 at 20:56:51 (UTC)
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
Member: Endoro
Endoro Aug 15, 2013 at 21:31:28 (UTC)
Goto Top
@bastla
Super Idee mit den Extensions. (steht auch in der Hilfe, man müsste die nur mal lesen face-smile)
lg.
Member: colinardo
colinardo Aug 16, 2013 updated at 09:07:57 (UTC)
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
Member: bastla
bastla Aug 16, 2013 updated at 06:59:11 (UTC)
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
Member: Endoro
Endoro Aug 16, 2013 updated at 14:32:03 (UTC)
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 €.
Member: bastla
bastla Aug 16, 2013 at 09:18:29 (UTC)
Goto Top
@ Endoro
Auch schön face-smile - wobei ich immer noch zumindest ein "/s" für "dir" verwenden würde ...

Grüße
bastla
Member: joe65
joe65 Aug 20, 2013 at 17:57:54 (UTC)
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