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

Datei in alle unterordner kopieren, aber unterordner-tiefe abgeben können

Frage Entwicklung Batch & Shell

Mitglied: 45753

45753 (Level 1)

11.04.2007, aktualisiert 17.04.2007, 9612 Aufrufe, 7 Kommentare

Hallo zusammen,

mit der For-Schleife ist es ja möglich eine Datei in alle unterordner zu vervielfältigen...
for /R %%i in (.) do copy [Datei] "%%i"
Nur habe ich noch nicht rausbekommen, wie man die tiefe der Unterordner bestimmen kann. Wenn ich also z.B. nur eine Tiefe von 2 haben möchte, dann sollte die Batch datei in der lage sein, die datei in alle unterordner bis eben zu einer unterordnertiefe von 2 zu kopieren. Ab dort wird die Datei dann nicht mehr weiter vervielfältigt. ist das möglich ?

Gruss, wobleibtdiezeit.
Mitglied: 46503
11.04.2007 um 12:33 Uhr
Setze ein Variable, und wenn du bei dem gewünschten Wert angekommen bist, beende die Aktion.
Bitte warten ..
Mitglied: 45753
11.04.2007 um 12:38 Uhr
Ja, das ist auch mein Wunsch. Nur habe ich keine Ahnung wie ich Unterordner zählen kann., bzw der Batch datei das beibringen kann.
Bitte warten ..
Mitglied: 46503
11.04.2007 um 13:08 Uhr
Probiere es aus, sollte bis 3 funktionieren:
01.
@echo off & setlocal 
02.
Set /A zaehler=0 
03.
for /R %%i in (.) do if %zaehler% LSS 3 call :wasweissich "%%i" 
04.
goto :eof 
05.
 
06.
:wasweissich 
07.
set /A zaehler=%zaehler%+1 
08.
if %zaehler% GTR 3 goto :eof 
09.
echo %zaehler% 
10.
rem copy [Datei] "%1"  
11.
echo %1
Bitte warten ..
Mitglied: 45753
15.04.2007 um 21:03 Uhr
Hallo hpdnm,

ich habe das gerade mal auprobiert...
Der Batch macht leider nicht das wonach ich suche. Folgendes Szenario:

In einem Ordner liegt eine Datei die ich in alle unterordner bis zu einer Tiefe von 2 in alle jeweiligen unterordner kopieren möchte - also z.B.:

Baumstruktur:
OrdnerAA\OrdnerAB\OrdnerAC
OrdnerBA\OrdnerBB\OrdnerBC

Die Batch sollte das hier können:

Datei kopieren nach
OrdnerAA
OrdnerAA\OrdnerAB
OrdnerBA
OrdnerBA\OrdnerBB

Die jetzige Batch würde so vorgehen:

Datei kopieren nach
OrdnerAA
OrdnerAA\OrdnerAB
OrdnerAA\OrdnerAB\OrdnerAC
OrdnerBA

Gibt es dafür eine Lösung?
Vielleicht kann man die Anzahl der Backslashs von dem Ordner in dem man sich gerade befindet bis zu der gewünschten Ordnertiefe zählen lassen...

Wenn es mit Boardmitteln nicht geht...
-Bei Robocopy kann man ein /LEV:n angeben, doch das bezieht sich meines Wissens nur auf den Source Folder und nicht auf den Destination Folder.
-Kann xxcopy das vielleicht ?

Grüsse,
wobleibtdiezeit
Bitte warten ..
Mitglied: Biber
15.04.2007 um 23:16 Uhr
Moin wobleibtdiezeit,

ich würde es von von der Funktionalität her trennen und dieses vielleicht auch an anderen Stellen verwendbare "Gib mir alle Unterordner unterhalb von XXX in einer Tiefe von 2 (oder 3 oder 4...oder 7)" in einen seperaten Oneliner packen.

Vielleicht lässt es sich ja noch mal wiederverwenden bei einer DirSize-Variante oder ähnlichem.

So ein Billigschnipsel könnte so aussehen:
01.
:: ---------snipp DispDirsAndSubdirs.bat 
02.
@Setlocal EnabledelayedExpansion & FOR /R "%~dpnx1" %%i in (.) do @( 
03.
   set "thisdir=%%~sdpnxi\." & set "relDir=!thisDir:%~sdpnx1\=!" 
04.
  for /f "delims=\ tokens=1,%2,*" %%a in ("!relDir!") do @if "%%c" LEQ "." echo %%~dpnxi 
05.
)  
06.
:: ---------snapp DispDirsAndSubdirs.bat
Und würde aufgrufen werden mit den zwei Parametern Param1==StartDir und Param2==Verzeichnistiefe.
So würde ein Aufruf des Einzeilers mit "c:\Eigene Dateien" und 4 alle Unterverzeichnisse bis zu 4 Ebenen unterhalb "C:\Eigene Dateien" liefern.
01.
$cmd$DispDirAndSubDirs.bat "c:\Eigene Dateien" 4 
02.
c:\Eigene Dateien 
03.
c:\Eigene Dateien\My eBooks 
04.
c:\Eigene Dateien\Eigene Bilder 
05.
c:\Eigene Dateien\Eigene Webs 
06.
c:\Eigene Dateien\Eigene Webs\_vti_pvt 
07.
c:\Eigene Dateien\Eigene Webs\_private 
08.
c:\Eigene Dateien\Eigene Webs\_vti_cnf 
09.
....
...allerdings auch das Start-Verzeichnis "c:\Eigene Dateien" selbst als erste Zeile.

Dennoch, wenn Du diesen Schnipsel als Batch irgendwo abspeicherst, dann kannst Du ihn innerhalb Deines KopierMir-Batches in einer For /f-Anweisung aufrufen.
[Edit] Kannst dieses Zeile natürlich auch als geCALLten Block in Deine Batch integrieren. Dann ist er nur nicht "wiederverwendbar". [/Edit]
Beispiel in Deinem Batch :
01.
@Echo off  
02.
 
03.
for /f "skip=1 delims=" %%i in ('D:\batches\DispDirsAndSubdirs d:\MeinOrdner 2') do Copy test.txt "%%i\test.txt"
Wermutstropfen: der "DispDirsAndSubDirs"-Batch funktioniert nur ab einer Mindesttiefe von 2 Ebenen (nicht mit EINER).
Dazu müsstest/würdest Du sinnvollerweise auf eine "For /D.." -Anweisung zurückgreifen.

Wenn Dir die obige Mimik zu aufwändig ist, kannst Du ohnehin auch 2 Verzeichnisebenen mit zwei gestaffelten FOR /D-Anweisungen abfackeln.

01.
Set Startdir=D:\test 
02.
FOR /D %%i in ("%startdir%"} do copy test.txt ""%Startdir%\%%i\test.txt" && For /D %%j in ("%Startdir%\%%i") Do copy test.txt ""%Startdir%\%%i\%%j\test.txt" 
HTH
Biber
Bitte warten ..
Mitglied: 45753
16.04.2007 um 14:59 Uhr
Hallo Biber,

Danke fuer deine Antwort. Ich werde versuchen mich heute abend drum zu kümmern, sodass die meine Antwort hoffentlich nicht lange auf sich warten läst...

Ich habe Deinen Schnipsel jetzt ausprobiert und es funtioniert alles. In meine Batch habe ich es noch nicht eingebaut, aber das wird nach Deiner Ausführlichen Anleitung denke ich nicht sehr schwer werden. Ich begeb mich mal dran.

Vielen Danke für Deine Hilfe!

Grüsse,
wobleibtdiezeit
Bitte warten ..
Mitglied: Biber
17.04.2007 um 19:29 Uhr
Moin, wobleibtdiezeit,

gern geschehen, und der Vollständigkeit halber poste ich noch mal zwei "extreme" Variationen des ursprünglichen Ansatzes.

a) als ganz eigenständige Batch-Variante CopyIntoDirsAndSubdirs mit drei Parametern (1=Ab wo 2=Ebenen 3=Was)

01.
:: ---------snipp CopyIntoDirsAndSubdirs.bat [Parameter z.B. d:\temp 3 x:\myStuff.txt] 
02.
@Setlocal EnabledelayedExpansion & FOR /R "%~dpnx1" %%i in (.) do @( 
03.
   set "thisdir=%%~sdpnxi\." & set "relDir=!thisDir:%~sdpnx1\=!" 
04.
  for /f "delims=\ tokens=1,%2,*" %%a in ("!relDir!") do @if "%%c" LEQ "." copy "%~3" "%%~dpnxi\%~nx3 
05.
)  
06.
:: ---------snapp CopyIntoDirsAndSubdirs.bat
b) als geCALLter Block innerhalb eines Batches


01.
:: ---------snipp IrgendeinBatch.bat [Parameter z.B. d:\temp 3 x:\myStuff.txt] 
02.
@echo off & Setlocal EnabledelayedExpansion 
03.
 
04.
:: whatever happens .... 
05.
..... 
06.
.... 
07.
:: an der nötigen Stelle: 
08.
Call :CopyIntoDirsAndSubDirs "C:\Eigene Dateien" 3 f:\blablubb.txt 
09.
... 
10.
::..weiter im Batch 
11.
goto :eof 
12.
 
13.
:CopyIntoDirsAndSubDirs: [Parameter z.B. %1=d:\temp %2=3 %3=x:\myStuff.txt] 
14.
FOR /R "%~dpnx1" %%i in (.) do @( 
15.
   set "thisdir=%%~sdpnxi\." & set "relDir=!thisDir:%~sdpnx1\=!" 
16.
  for /f "delims=\ tokens=1,%2,*" %%a in ("!relDir!") do ( 
17.
       @if "%%c" LEQ "." copy "%~3" "%%~dpnxi\%~nx3 
18.
)) 
19.
goto :eof 
20.
:: endOfSub :CopyIntoDirsAndSubdirs 
21.
:: ---------snipp IrgendeinBatch.bat

Ich setze den Beitrag mal auf "Gelöst" und "Geschlossen".

Gruss
Biber
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

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

Frage von heyalice zum Thema Batch & Shell ...

Microsoft
Sfirm STA Datei automatisch kopieren (1)

Frage von thomasreischer zum Thema Microsoft ...

Batch & Shell
Powershell multiple Datei-Inhaltssuche und mehrere Unterordner (3)

Frage von Jenny82 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
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 ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...