Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Flach kopieren

Frage Entwicklung Bibliotheken & Toolkits

Mitglied: Blueberry

Blueberry (Level 1) - Jetzt verbinden

27.10.2009 um 13:51 Uhr, 4835 Aufrufe, 9 Kommentare

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
Mitglied: Snowman25
27.10.2009 um 14:03 Uhr
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
01.
@ECHO OFF 
02.
IF [%1]==[/?] ( 
03.
 Echo Graphically displays the folder structure of a drive or path. 
04.
 Echo Usage: %~nx0 [/dasf] [drive:][path] [ [/dasf] [drive:][path] ...] 
05.
 Echo   /d:  show File Dates 
06.
 Echo   /a:  Show File Attributes 
07.
 Echo   /s:  Show FileSizes 
08.
 Echo   /f:  Show Files in Directories 
09.
 Echo   /t:  Use Tree.com format 
10.
 Echo   /c:  Use compact format - negates /t 
11.
 Echo. 
12.
 GOTO :EOF 
13.
14.
 
15.
(SET Hasfiles=) & (SET Root=) 
16.
Set Params=/ 
17.
Goto :GotSwitch 
18.
 
19.
:ParseParams 
20.
SHIFT 
21.
SET PARAMS=%~0 
22.
If "%PARAMS%"=="" (IF "%ROOT%"=="" (SET PARAMS=.) ELSE (GOTO :DONE)) 
23.
IF "%PARAMS:~0,1%"=="/" GOTO :GOTSWITCH 
24.
IF "%PARAMS:~0,1%"=="-" GOTO :GOTSWITCH 
25.
SET Root=%PARAMS% 
26.
CALL :Root "%ROOT%" 
27.
GOTO :ParseParams 
28.
:GOTSWITCH 
29.
(SET COMPACT=) & (SET SHOWDATE=) & (SET SHOWATTRIB=) & (SET SHOWSIZES=) & (SET SHOWFILES=) & (SET TREESTYLE=) 
30.
:NEXTSWITCH 
31.
SET PARAM=%PARAMS:~0,1% 
32.
SET PARAMS=%PARAMS:~1% 
33.
IF /I [%PARAM%]==[d] SET SHOWDATE=True 
34.
IF /I [%PARAM%]==[a] SET SHOWATTRIB=True 
35.
IF /I [%PARAM%]==[s] SET SHOWSIZES=True 
36.
IF /I [%PARAM%]==[f] SET SHOWFILES=True 
37.
IF /I [%PARAM%]==[t] SET TREESTYLE=True 
38.
IF /I [%PARAM%]==[c] SET COMPACT=True 
39.
IF NOT [%PARAMS%]==[] GOTO :NEXTSWITCH 
40.
IF /I [%COMPACT%]==[True] (SET TREESTYLE=) 
41.
GOTO :ParseParams 
42.
 
43.
:Done 
44.
pause 
45.
GOTO :EOF 
46.
:ROOT 
47.
ECHO. 
48.
REM ~ ECHO Showdate=%Showdate% 
49.
REM ~ ECHO SHOWATTRIB=%SHOWATTRIB% 
50.
REM ~ ECHO SHOWSIZES=%SHOWSIZES% 
51.
REM ~ ECHO SHOWFILES=%SHOWFILES% 
52.
REM ~ ECHO FileSing=%FileSing% 
53.
REM ~ ECHO FileMult=%FileMult% 
54.
REM ~ ECHO DirSing=%DirSing% 
55.
REM ~ ECHO DirMult=%DirMult% 
56.
REM ~ goto :EOF 
57.
 
58.
ECHO %~f1 
59.
:WalkTree 
60.
SETLOCAL 
61.
:: Set up Remainder of switches -- ME DirSpec |[|...] FileSpec 
62.
REM ~ Echo Params: %* 
63.
IF NOT [%1]==[] PUSHD %1 
64.
SET RECURPIPE=%~2 
65.
 
66.
(SET LASTDIR=) & (SET LASTFILE=) 
67.
For /D %%D in (*.*) DO SET LASTDIR=%%D 
68.
FOR %%F in (*.*) DO SET LASTFILE=%%F 
69.
REM ~ Echo LastFile=%LASTFILE% 
70.
REM ~ Echo LastDir =%LASTDIR% 
71.
REM ~ ECHO RecursivePipe %RECURPIPE% Multi %FILEMULT% single %FILESING% 
72.
IF /I [%TREESTYLE%]==[True] ( 
73.
 (Set VPAD=True) & (SET PADDING=) & (SET SPC=   ) & (SET FileSing=) & (SET FileMult=) & (SET DirSing=ÀÄÄÄ) & (SET DirMult=ÃÄÄÄ) & (SET DIRPAD=®DIR¯   ) 
74.
) ELSE ( 
75.
 (Set VPAD=True) & (SET PADDING= ) & (SET SPC=  ) & (SET FileSing=À) & (SET FileMult=Ã) & (SET DirSing=Ô) & (SET DirMult=Æ) & (SET PipeCHR=³) & (SET DIRPAD=®DIR¯   ) 
76.
77.
IF /I [%COMPACT%]==[True] (Set VPAD=) & (SET PADDING=) & (SET SPC=) & (SET FileSing=À) & (SET FileMult=Ã) & (SET DirSing=Ô) & (SET DirMult=Æ) & (SET PipeCHR=³) & (SET DIRPAD=ÍÍÍÍÍ   ) 
78.
IF /I NOT [%SHOWFILES%]==[True] (Set VPAD=) 
79.
 
80.
IF "%TREESTYLE%"=="True" ( 
81.
 IF "%LASTDIR%"=="" ( 
82.
  (SET Pipe=%RECURPIPE%%FILEMULT%%SPC%) & (SET Pipend=%RECURPIPE%%FILESING%%SPC%) & (SET VPADDING=%RECURPIPE%) 
83.
 ) ELSE ( 
84.
  (SET Pipe=%RECURPIPE%%PIPECHR%%SPC%) & (SET Pipend=%RECURPIPE%%PIPECHR%%SPC%) & (SET VPADDING=%RECURPIPE%%PIPECHR%) 
85.
86.
) ELSE ( 
87.
 IF "%LASTDIR%"=="" ( 
88.
  (SET Pipe=%RECURPIPE%%FILEMULT%) & (SET Pipend=%RECURPIPE%%FILESING%) & (SET VPADDING=%RECURPIPE%) 
89.
 ) ELSE ( 
90.
  (SET Pipe=%RECURPIPE%%FILEMULT%) & (SET Pipend=%RECURPIPE%%FILEMULT%) & (SET VPADDING=%RECURPIPE%%PIPECHR%) 
91.
92.
93.
IF [%3]==[] (SET Pipend=%PIPE%) 
94.
 
95.
IF /I [%SHOWFILES%]==[True] FOR %%F in (*.*) DO ( 
96.
 IF "%LASTFILE%"=="%%F" (CALL :PrintFile "%PIPEND%" "%%F") ELSE (CALL :PrintFile "%PIPE%" "%%F") 
97.
98.
 
99.
IF NOT "%LASTFILE%"=="" IF /I [%VPAD%]==[True] ECHO.%VPADDING% 
100.
 
101.
(SET Pipe=%RECURPIPE%%DIRMULT%) & (Set Pipend=%RECURPIPE%%DIRSING%) 
102.
(SET Pipecarry= ) & (SET LASTFILE=) 
103.
 
104.
 
105.
For /D %%D in (*.*) DO if "%LASTDIR%"=="%%D" ( 
106.
 CALL :PrintFile "%PIPEND%" "%%D" 
107.
 CALL :WalkTree "%%D" "%RECURPIPE%%PIPECARRY%%SPC%" "%LASTDIR%" 
108.
) ELSE ( 
109.
 CALL :PrintFile "%PIPE%" "%%D" 
110.
 CALL :WalkTree "%%D" "%RECURPIPE%%PIPECHR%%SPC%" "%LASTDIR%" 
111.
112.
 
113.
 
114.
POPD 
115.
ENDLOCAL 
116.
GOTO :EOF 
117.
 
118.
:PrintFile 
119.
(SET FILESIZE=) & (Set ATTRIBS=) 
120.
(Set ATTRIBS=%~a2 ) 
121.
IF [%SHOWDATE%]==[True] (Set DATTIME=%~t2 ) 
122.
(Set FILESIZE=%~z2       ) 
123.
SET FILESIZE=%FILESIZE:~0,7% 
124.
IF 999999 LSS %~z2 (Set FILESIZE=%~z2) 
125.
(Set FILESIZE=%FILESIZE% ) 
126.
IF /I "%ATTRIBS:~0,1%"=="d" (SET FILESIZE=%DIRPAD%) 
127.
IF NOT [%SHOWSIZES%]==[True] (Set FILESIZE=) 
128.
IF NOT [%SHOWATTRIB%]==[True] (Set ATTRIBS=) 
129.
:: Files with illegal characters need to stay quoted 
130.
SET FNAME=%2 
131.
SET FNAME=%FNAME:&=% 
132.
:: Filenames with parentheses break IF blocks 
133.
IF [%FNAME%]==[%2] GOTO :DropQuotes 
134.
SET FNAME=%2 
135.
Goto :Print 
136.
:DropQuotes 
137.
SET FNAME=%~2 
138.
:Print 
139.
ECHO %~1%PADDING%%DATTIME%%ATTRIBS%%FILESIZE%%FNAME%
Bitte warten ..
Mitglied: IT-Muscle
27.10.2009 um 14:03 Uhr
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?
Bitte warten ..
Mitglied: Blueberry
27.10.2009 um 14:10 Uhr
Hallo Snowman25

Erstmal, danke viel mals für deinen Batch!
Bezüglich den überschneidungen, dieses Problem ist schon behoben... Und stellt im Moment kein Problem dar.

Kann man da auch mehrere dateien mitgeben, es sind ein paar Tausend Files die Kopiert werden... Wenn ja, was für einen Seperator hast du eingebaut?

Grüsse Blueeberry
Bitte warten ..
Mitglied: Snowman25
27.10.2009 um 14:16 Uhr
Nunja, das Script ist nicht von mir. Es ist praktisch der batch-nachbau der Tree.com (welche wesentlich schneller läuft).
Du müsstest jetzt praktisch die Rekursion aus dem Programm extrahieren und das dann mit dem xcopy befehl koppeln...
Bitte warten ..
Mitglied: ITIL-Harry
27.10.2009 um 15:10 Uhr
jap - das macht es aber auch ohne /E - mit /E kopiert er leere Verzeichnisse mit
Also: einfach /E weglassen und die leeren Verzeichnisse sind am Ziel nicht da.
Bitte warten ..
Mitglied: utiuti
27.10.2009 um 15:54 Uhr
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
Bitte warten ..
Mitglied: 60730
27.10.2009 um 22:29 Uhr
naabend

auch wenn das nicht ganz so viele Rems wie das vom Schneeman hat, das sollte es doch auch tun.

01.
:para 
02.
set quelle = "c:\somefiles" 
03.
set ziel = "c:\tempo" 
04.
 
05.
if not exist %quelle% goto end 
06.
if not exist %ziel% md "%ziel%" 
07.
@for /f "tokens=*" %%a in ('dir /b /s "%quelle%\*.*"') do @( 
08.
         @xcopy /h /i /c /k /d  "%%a" "%ziel%" >nul 
09.
10.
:end
Gruß
Bitte warten ..
Mitglied: Snowman25
29.10.2009 um 09:31 Uhr
jetzt hab ich mir nochmal die Hilfe von for angeschaut und dann bemerkt, dass das ja auch einfacher geht. Sogar ein Einzeiler
01.
for /D %a in (*) do copy "%a" C:\Test
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:
01.
for /R /D %a in (*) do copy "%a" C:\Test
funktioniert. Wenn du willst, kannst du ja noch den xcopy von Timo nehmen
Bitte warten ..
Mitglied: Blueberry
02.11.2009 um 11:11 Uhr
Hallo Zusammen

Ich danke euch für eure Lösungen!
Bitte warten ..
Neuester Wissensbeitrag
Heiß diskutierte Inhalte
DSL, VDSL
gelöst DSL 200m verlängern (16)

Frage von Angela44 zum Thema DSL, VDSL ...

LAN, WAN, Wireless
Per Script auf UniFi-controller zugreifen und WPA2-Key ändern (11)

Frage von Winfried-HH zum Thema LAN, WAN, Wireless ...

Windows Server
SBS 2011 Standard virtualisieren (11)

Frage von HeinrichM zum Thema Windows Server ...

Exchange Server
gelöst DHCP Sever MS Server 2012 Problem (10)

Frage von Florian86 zum Thema Exchange Server ...