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, 4828 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
Festplatten, SSD, Raid

12TB written pro SSD in 2 Jahren mit RAID5 auf Hyper-VServer

Erfahrungsbericht von Lochkartenstanzer zum Thema Festplatten, SSD, Raid ...

Ähnliche Inhalte
Batch & Shell
Ordner erstellen ll Datei hinein kopieren (1)

Frage von heyalice zum Thema Batch & Shell ...

Datenbanken
gelöst DB2 Daten in Windows DB2 kopieren (1)

Frage von Emheonivek zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...