Flach kopieren
Hallo Zusammen
Ich habe ein Problem und zwar habe ich keine Ahnung, wie ich flach kopieren kann... Ich hab bei Robocopy, xcopy und copy geschaut und auch probiert, aber es geht irgendwie nichts...
Es geht darum, dass wir in der Firma jetzt gerade eine Migration machen und ich dazu ein Script schreiben muss, dass die Dateien in eine andere Struktur bringen soll und da gewiesse Ordner hinzukommen, aber auch viele wegfallen und da ich nicht jede Datei einzeln angeben möchte, müsste ich dazu flachkopieren können, damit die unterverzeichnisse wegfallen... Habt ihr eine Idee, wie ich das machen kann bzw. ob es da evtl. Tools gibt??
Danke euch für alle Antworten!
Grüsse Blueeberry
Ich habe ein Problem und zwar habe ich keine Ahnung, wie ich flach kopieren kann... Ich hab bei Robocopy, xcopy und copy geschaut und auch probiert, aber es geht irgendwie nichts...
Es geht darum, dass wir in der Firma jetzt gerade eine Migration machen und ich dazu ein Script schreiben muss, dass die Dateien in eine andere Struktur bringen soll und da gewiesse Ordner hinzukommen, aber auch viele wegfallen und da ich nicht jede Datei einzeln angeben möchte, müsste ich dazu flachkopieren können, damit die unterverzeichnisse wegfallen... Habt ihr eine Idee, wie ich das machen kann bzw. ob es da evtl. Tools gibt??
Danke euch für alle Antworten!
Grüsse Blueeberry
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 128022
Url: https://administrator.de/contentid/128022
Ausgedruckt am: 25.11.2024 um 17:11 Uhr
9 Kommentare
Neuester Kommentar
Ich an deiner stelle würde erst mal prüfen, wo sich Dateinamen überschneiden.
Dieses Script hat besagt rekursion. Richtig angepasst sollte es dir bei deinem problem behilflich sein
Dieses Script hat besagt rekursion. Richtig angepasst sollte es dir bei deinem problem behilflich sein
@ECHO OFF
IF [%1]==[/?] (
Echo Graphically displays the folder structure of a drive or path.
Echo Usage: %~nx0 [/dasf] [drive:][path] [ [/dasf] [drive:][path] ...]
Echo /d: show File Dates
Echo /a: Show File Attributes
Echo /s: Show FileSizes
Echo /f: Show Files in Directories
Echo /t: Use Tree.com format
Echo /c: Use compact format - negates /t
Echo.
GOTO :EOF
)
(SET Hasfiles=) & (SET Root=)
Set Params=/
Goto :GotSwitch
:ParseParams
SHIFT
SET PARAMS=%~0
If "%PARAMS%"=="" (IF "%ROOT%"=="" (SET PARAMS=.) ELSE (GOTO :DONE))
IF "%PARAMS:~0,1%"=="/" GOTO :GOTSWITCH
IF "%PARAMS:~0,1%"=="-" GOTO :GOTSWITCH
SET Root=%PARAMS%
CALL :Root "%ROOT%"
GOTO :ParseParams
:GOTSWITCH
(SET COMPACT=) & (SET SHOWDATE=) & (SET SHOWATTRIB=) & (SET SHOWSIZES=) & (SET SHOWFILES=) & (SET TREESTYLE=)
:NEXTSWITCH
SET PARAM=%PARAMS:~0,1%
SET PARAMS=%PARAMS:~1%
IF /I [%PARAM%]==[d] SET SHOWDATE=True
IF /I [%PARAM%]==[a] SET SHOWATTRIB=True
IF /I [%PARAM%]==[s] SET SHOWSIZES=True
IF /I [%PARAM%]==[f] SET SHOWFILES=True
IF /I [%PARAM%]==[t] SET TREESTYLE=True
IF /I [%PARAM%]==[c] SET COMPACT=True
IF NOT [%PARAMS%]== GOTO :NEXTSWITCH
IF /I [%COMPACT%]==[True] (SET TREESTYLE=)
GOTO :ParseParams
:Done
pause
GOTO :EOF
:ROOT
ECHO.
REM ~ ECHO Showdate=%Showdate%
REM ~ ECHO SHOWATTRIB=%SHOWATTRIB%
REM ~ ECHO SHOWSIZES=%SHOWSIZES%
REM ~ ECHO SHOWFILES=%SHOWFILES%
REM ~ ECHO FileSing=%FileSing%
REM ~ ECHO FileMult=%FileMult%
REM ~ ECHO DirSing=%DirSing%
REM ~ ECHO DirMult=%DirMult%
REM ~ goto :EOF
ECHO %~f1
:WalkTree
SETLOCAL
:: Set up Remainder of switches -- ME DirSpec |[|...] FileSpec
REM ~ Echo Params: %*
IF NOT [%1]== PUSHD %1
SET RECURPIPE=%~2
(SET LASTDIR=) & (SET LASTFILE=)
For /D %%D in (*.*) DO SET LASTDIR=%%D
FOR %%F in (*.*) DO SET LASTFILE=%%F
REM ~ Echo LastFile=%LASTFILE%
REM ~ Echo LastDir =%LASTDIR%
REM ~ ECHO RecursivePipe %RECURPIPE% Multi %FILEMULT% single %FILESING%
IF /I [%TREESTYLE%]==[True] (
(Set VPAD=True) & (SET PADDING=) & (SET SPC= ) & (SET FileSing=) & (SET FileMult=) & (SET DirSing=ÀÄÄÄ) & (SET DirMult=ÃÄÄÄ) & (SET DIRPAD=®DIR¯ )
) ELSE (
(Set VPAD=True) & (SET PADDING= ) & (SET SPC= ) & (SET FileSing=À) & (SET FileMult=Ã) & (SET DirSing=Ô) & (SET DirMult=Æ) & (SET PipeCHR=³) & (SET DIRPAD=®DIR¯ )
)
IF /I [%COMPACT%]==[True] (Set VPAD=) & (SET PADDING=) & (SET SPC=) & (SET FileSing=À) & (SET FileMult=Ã) & (SET DirSing=Ô) & (SET DirMult=Æ) & (SET PipeCHR=³) & (SET DIRPAD=ÍÍÍÍÍ )
IF /I NOT [%SHOWFILES%]==[True] (Set VPAD=)
IF "%TREESTYLE%"=="True" (
IF "%LASTDIR%"=="" (
(SET Pipe=%RECURPIPE%%FILEMULT%%SPC%) & (SET Pipend=%RECURPIPE%%FILESING%%SPC%) & (SET VPADDING=%RECURPIPE%)
) ELSE (
(SET Pipe=%RECURPIPE%%PIPECHR%%SPC%) & (SET Pipend=%RECURPIPE%%PIPECHR%%SPC%) & (SET VPADDING=%RECURPIPE%%PIPECHR%)
)
) ELSE (
IF "%LASTDIR%"=="" (
(SET Pipe=%RECURPIPE%%FILEMULT%) & (SET Pipend=%RECURPIPE%%FILESING%) & (SET VPADDING=%RECURPIPE%)
) ELSE (
(SET Pipe=%RECURPIPE%%FILEMULT%) & (SET Pipend=%RECURPIPE%%FILEMULT%) & (SET VPADDING=%RECURPIPE%%PIPECHR%)
)
)
IF [%3]== (SET Pipend=%PIPE%)
IF /I [%SHOWFILES%]==[True] FOR %%F in (*.*) DO (
IF "%LASTFILE%"=="%%F" (CALL :PrintFile "%PIPEND%" "%%F") ELSE (CALL :PrintFile "%PIPE%" "%%F")
)
IF NOT "%LASTFILE%"=="" IF /I [%VPAD%]==[True] ECHO.%VPADDING%
(SET Pipe=%RECURPIPE%%DIRMULT%) & (Set Pipend=%RECURPIPE%%DIRSING%)
(SET Pipecarry= ) & (SET LASTFILE=)
For /D %%D in (*.*) DO if "%LASTDIR%"=="%%D" (
CALL :PrintFile "%PIPEND%" "%%D"
CALL :WalkTree "%%D" "%RECURPIPE%%PIPECARRY%%SPC%" "%LASTDIR%"
) ELSE (
CALL :PrintFile "%PIPE%" "%%D"
CALL :WalkTree "%%D" "%RECURPIPE%%PIPECHR%%SPC%" "%LASTDIR%"
)
POPD
ENDLOCAL
GOTO :EOF
:PrintFile
(SET FILESIZE=) & (Set ATTRIBS=)
(Set ATTRIBS=%~a2 )
IF [%SHOWDATE%]==[True] (Set DATTIME=%~t2 )
(Set FILESIZE=%~z2 )
SET FILESIZE=%FILESIZE:~0,7%
IF 999999 LSS %~z2 (Set FILESIZE=%~z2)
(Set FILESIZE=%FILESIZE% )
IF /I "%ATTRIBS:~0,1%"=="d" (SET FILESIZE=%DIRPAD%)
IF NOT [%SHOWSIZES%]==[True] (Set FILESIZE=)
IF NOT [%SHOWATTRIB%]==[True] (Set ATTRIBS=)
:: Files with illegal characters need to stay quoted
SET FNAME=%2
SET FNAME=%FNAME:&=%
:: Filenames with parentheses break IF blocks
IF [%FNAME%]==[%2] GOTO :DropQuotes
SET FNAME=%2
Goto :Print
:DropQuotes
SET FNAME=%~2
:Print
ECHO %~1%PADDING%%DATTIME%%ATTRIBS%%FILESIZE%%FNAME%
also wenns Dir wirklich nur ums kopieren geht wäre ein Tool wie Puresync doch was für Dich!?.. da kann man glaube ich ohne Verzeichnisse die kompletten Inhalte kopieren!
probiers einfach mal aus.. ansonsten müsste es doch aber auch mit xcopy gehen?.. wenn ich mich nicht irre kopiert er doch erst mit xcopy /E die gesamte Verzeichnisstruktur mit oder?
probiers einfach mal aus.. ansonsten müsste es doch aber auch mit xcopy gehen?.. wenn ich mich nicht irre kopiert er doch erst mit xcopy /E die gesamte Verzeichnisstruktur mit oder?
Moin Moin,
mal etwas am Thema Script vorbei, aber trotzdem...
Der TotalCommander besitzt auch so eine Fähigkeit.
Zumindest kann man dann alle Dateien in allen Unterverzeichnissen sehen, und damit auch kopieren.
Aber ich glaube nicht das man das per Script steuern kann.
Hat mir trotzdem schon manchmal geholfen.
Gerade beim Suchen nach Dateien deren Namen man nicht kennt
Vielleicht hilfts ja noch Jemandem.
Gruß Marcel
mal etwas am Thema Script vorbei, aber trotzdem...
Der TotalCommander besitzt auch so eine Fähigkeit.
Zumindest kann man dann alle Dateien in allen Unterverzeichnissen sehen, und damit auch kopieren.
Aber ich glaube nicht das man das per Script steuern kann.
Hat mir trotzdem schon manchmal geholfen.
Gerade beim Suchen nach Dateien deren Namen man nicht kennt
Vielleicht hilfts ja noch Jemandem.
Gruß Marcel
naabend
auch wenn das nicht ganz so viele Rems wie das vom Schneeman hat, das sollte es doch auch tun.
Gruß
auch wenn das nicht ganz so viele Rems wie das vom Schneeman hat, das sollte es doch auch tun.
:para
set quelle = "c:\somefiles"
set ziel = "c:\tempo"
if not exist %quelle% goto end
if not exist %ziel% md "%ziel%"
@for /f "tokens=*" %%a in ('dir /b /s "%quelle%\*.*"') do @(
@xcopy /h /i /c /k /d "%%a" "%ziel%" >nul
)
:end
Gruß
jetzt hab ich mir nochmal die Hilfe von
Einfach im root ausführen und alles wird 'flach' kopiert
hmm... da fehlt noch was... grade bemerkt, dass dann nur die erste Ebene Ordner durchlaufen wird
Update:
funktioniert. Wenn du willst, kannst du ja noch den xcopy von Timo nehmen
for
angeschaut und dann bemerkt, dass das ja auch einfacher geht. Sogar ein Einzeilerfor /D %a in (*) do copy "%a" C:\Test
hmm... da fehlt noch was... grade bemerkt, dass dann nur die erste Ebene Ordner durchlaufen wird
Update:
for /R /D %a in (*) do copy "%a" C:\Test