Top-Themen

Aktuelle Themen (A bis Z)

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

Name eines Verzeichnisses per batch finden und damit weiterarbeiten?

Mitglied: Jediman

Jediman (Level 1) - Jetzt verbinden

21.08.2005, aktualisiert 23.08.2005, 9299 Aufrufe, 6 Kommentare

Name eines Verzeichnisses per batch finden und damit weiterarbeiten?

Hallo

ich benötige für ein paar automatisierte Kopieraktionen eine kleine .bat Datei die den Namen eines Verzeichnisses rausfindet bzw von mehreren Verzeichnissen, sozusagen nach folgendem Muster:

1. schau im Verzeichnis1 nach welche Verzeichnisse es dort gibt und wie sie heissen.
2. kopieren dann eine Datei x.txt in JEDES der oben gefundenen Verzeichnisse rein

Im Prinzip also ein Schleife die nachschaut welche Verzeichnisse existieren und bei einem gefundenen Verzeichnis dann eine Datei jeweils in das gefundene Verzeichnis schreibt, bis alle Verzeichnisse abgearbeitet wurden die im Verzeichnis1 drinne sind.

Hoffe ich hab es nicht zu kompliziert ausgedrückt *g*
... und schonmal Danke für alle Antworten
Mitglied: Biber
22.08.2005 um 02:42 Uhr
Nimm diesen Oneliner:
snipp CopyFileToAllDirsBelowDir.bat----------
<font size=-2>@if "%*"=="" (@Echo Syntax: %0 File ToDir) ELSE (@for /r "%~2" %%i in (.) do @If Not "%~1"=="%%~i" @copy "%~1" "%%~i" >nul)</font>
snipp CopyFileToAllDirsBelowDir.bat-------
HTH Frank /der Biber aus Bremen
Bitte warten ..
Mitglied: Biber
22.08.2005 um 07:20 Uhr
Moin, Jediman,
sorry, wenn ich im obigen Kommentar so kurz angebunden war - ich hatte die Antwort schon einmal eingetippt und war dabei abgestürzt.. genauer gesagt mein Brauser. Egal.

Also jetzt noch kurz ein paar Nachträge:
- ein CopyFileToAllDirsBelowDir.bat x.txt d:\temp kopiert Dir die Datei x.txt in alle Unterverzeichnisse unterhalb von d:\temp.
- Nicht in D:\temp selbst. Wenn es da auch hin soll: @If Not "%~1"=="%%~i" löschen.
- Dafür wird x.txt auch in alle Unter-Unterverzeichnisse kopiert. Wenn es nur auf die erste Ebene unterhalb d:\temp soll, noch mal posten. Dann machen wir einen Zweizeiler draus *gg
- WARNUNG: das Bätchelchen macht auch ohne Rückfrage ein CopyFileToAllDirsBelowDir.bat c:\*.* d:\temp und müllt Dir zu, was auch immer Du schriftlich verlangst.

Und eine Frage noch:
Ich verwende immer relativ viel Energie und Gehirnschmalz darauf, Dateiduplikate zu vermeiden statt zu erzeugen ... Was um alles in der Welt treibt Dich zu dieser Anforderung??? Nur mal interessehalber...
Bitte warten ..
Mitglied: Jediman
22.08.2005 um 08:24 Uhr
Erst mal vielen Dank Biber für deine Antwort

Ich benötige das ganze für eine kleine Installations-Routine, auf das zu "manipulierende" Ziel hab ich leider keinen Einfluss, daher das etwas komplizierte.

Mein Problem genau ist folgendes:

Ich befinde mich im Root-Verteichnis eines Spiels

W:\Spiel

nun "möchte" ich per .bat 2 Dateien für ein Layout was sich öffters ändert in Unterverzeichnisse kopieren, deren Name ich allerdings nicht kenne und das ist eben mein Problem. Bisher habe ich es so gelöst das der Nutzer seinen Accountnamen und dann anschliessend jeweils seine bis zu 20 Charnamen per Hand eingeben musste, was natürlich bei 20 Spieler-Chars doch etwas umständlich ist. Daher suche ich alternativ eine automatische Erkennung der Verzeichnisse

genau sollte es so sein:

ich bin im Verzeichnis W:\Spiel

gehe nun ins Verzeichnis W:\Spiel\Account

[START Schleife 1]
- Abfrage: Schaue nach welche Accounts/Verzeichnisse existieren (eventuell mit /dir)

- Abfrage: Wie heisst das ERSTE gefundene Verzechnis? Weise den erfragten Namen einer Variablen zu zB %AccName%

- Gehe nun in das ERSTE erfragte Verzeichnis (dessen Name ich ja nicht kenne) cd %AccName%

[START Schleife 2]
- Schaue nun nach in dem Verzeichnis %AccName% ob sich dort Charnamen=Verzeichnisse befinden und weise (eventuell mit /dir erfragen?) diesen gefundenen Charnamen/Verzeichnisse die Variable %Char% zu

kopiere alle im Verzeichnis W:\Spiel\template\*.* befindlichen DATEIEN in das erfragte Verzeichnis W:\Spiel\Account\%AccName%\%Char%\*.*

Arbeite das ganze solange ab, bis keine CHARNAMEN=Verzeichnisse mehr gefunden werden
Wenn welche gefunden werden gehen nach Anfang Schleife 2
Werden keine weiteren CHARNAMEN=Verzeichnisse gefunden dann schau nach ob es noch einen weiteren Account gibt. Schaue nach ob noch weitere Accounts (siehe Schleife 1) existieren, erfrage dort auch die CHARNAMEN=Verzeichnisse und kopieren dann auch jeweils in jedes gefundenen Charnamen=Verzeichniss

[ENDE Schleife 2]

Schaue nach ob noch weitere Accounts (siehe Schleife 1) existieren, erfrage dort auch die Charnamen und kopieren dann auch jeweils in jedes gefundenen Charnamen=Verzeichniss
[ENDE Schleife 1]

Ordner Struktur wäre zB

Quelle:
W:\Spiel\template\*.*

Ziel:
W:\Spiel\Account\Account1\Char1\
W:\Spiel\Account\Account1\Char2\
W:\Spiel\Account\Account1\Char3\
W:\Spiel\Account\Account1\Char4\
W:\Spiel\Account\Account1\Char5\
W:\Spiel\Account\Account1\Char6\

W:\Spiel\Account\Account2\Char1\
W:\Spiel\Account\Account2\Char2\
W:\Spiel\Account\Account2\Char3\

.... hoffe das versteht einer *g*
Bitte warten ..
Mitglied: Biber
22.08.2005 um 11:21 Uhr
aaahhh, Jediman,
jetzt versteh ich...(glaub ich *gg)... Du brauchst DEN Oneliner:
CopyTemplates.bat
@for /r W:\Spiel\Account %%a in (.\Account*) do @for /r %%~dpa %%i in (.) do copy W:\Spiel\template\*.* "%%~i" >nul
----------snapp CopyTemplates.bat

das mit Deinen vielen Schleifen und Variablen hab ich nicht verstanden, das würde bestimmt auch Stunden dauern, so zwei um sich kreisende Schleifen zu programmieren...

probier aber lieber erst den "entschärften" TestCopyTemplates.bat aus
---snipp----------
@for /r W:\Spiel\Account %%a in (.\Account*) do @for /r %%~dpa %%i in (.) do @ECHO copy W:\Spiel\template\*.* "%%~i" ^>NUL
---snapp

So würde es zumindest (denke ich) fünktionieren, wenn unterhalb W:\Spiel\Account\Account?\ nur Verzeichnisse ("CHARy" in Deinem Beispiel) und keine Dateien wären.
Wohler wäre mir (und Dir sicher auch) wenn sich das "(.)" in der 2. FOR-Schleife eingegrenzt werden könnte durch eine bestimmte Dateimaskenvorgabe. Aber die "CHAR.."-Verzeichnisnamen sind frei wählbar für deine Anwender??
Dann musst Du VOR das Copy noch diese Prüfung setzen: If Exist "%%~i\." , damit nur in Verzeichnisse kopiert wird und nicht auf Dateien in der Ebene W:\Spiel\Account\Account?.

Sind bestimmt noch Denkfehler drin, aber in der Theorie klappt es prima.
Bitte warten ..
Mitglied: Biber
23.08.2005 um 10:13 Uhr
Moin, Jediman,

wir haben uns das Leben unnötig schwer gemacht, geht noch einfacher.
Zumindest bei Deiner speziellen Verzeichnis-Struktur.
Ich habe es mal bei mir nachgebildet.

Mein "D:\temp" entspricht Deinem "W:\Spiel"... Egal - ich halte es variabel:
>Set SPIELEROOT=D:\temp

Ausgangssituation: Unterhalb %SPIELEROOT%\accounts existieren ein paar Accounts (acc_birgit, admin. gast. user19),
die alle ein paar "Spielerkonten" angelegt haben. Acc_birgit zum Beispiel "biggi01" und "biggi02"..
Außerdem existiert ebenfalls unterhalb %SPIELEROOT% ein template-Unterzeichnis mit 2 *.txt-Dateien.
<= 9:40:46 D:\temp=>
>dir /s /b %SPIELEROOT%\accounts
D:\temp\accounts\acc_birgit
D:\temp\accounts\admin
D:\temp\accounts\gast
D:\temp\accounts\user19
D:\temp\accounts\acc_birgit\biggi01
D:\temp\accounts\acc_birgit\biggi02
D:\temp\accounts\acc_birgit\gast
D:\temp\accounts\admin\DI
D:\temp\accounts\admin\MI
D:\temp\accounts\admin\MO
D:\temp\accounts\gast\player3
D:\temp\accounts\gast\player56
D:\temp\accounts\user19\megashooter
D:\temp\accounts\user19\supershooter
D:\temp\accounts\user19\supershooter\serverlog.txt

>dir /s /b %SPIELEROOT%\template
D:\temp\template\setipconfig2IP.txt
D:\temp\template\vbsskripte.txt
(Die beiden *.txt sollen kopiert werden wie bei Dir beschrieben.

Lösung
Dann reicht doch logischerweise diese Zeile
"in alle Unterverzeichnissen, die ZWEI Ebenen tiefer hängen als die Ebene template kopiere...."

>@for /r %SPIELEROOT%\Accounts %a in (.) do @if exist %a.\..\..\template copy %a.\..\..\template\*.txt %a

Ergebnis
<=10:01:15 D:\temp=>
>dir /s /b %SPIELEROOT%\accounts\*.txt
D:\temp\accounts\acc_birgit\biggi01\setipconfig2IP.txt
D:\temp\accounts\acc_birgit\biggi01\vbsskripte.txt
D:\temp\accounts\acc_birgit\biggi02\setipconfig2IP.txt
D:\temp\accounts\acc_birgit\biggi02\vbsskripte.txt
D:\temp\accounts\acc_birgit\gast\setipconfig2IP.txt
D:\temp\accounts\acc_birgit\gast\vbsskripte.txt
D:\temp\accounts\admin\DI\setipconfig2IP.txt
D:\temp\accounts\admin\DI\vbsskripte.txt
D:\temp\accounts\admin\MI\setipconfig2IP.txt
D:\temp\accounts\admin\MI\vbsskripte.txt
D:\temp\accounts\admin\MO\setipconfig2IP.txt
D:\temp\accounts\admin\MO\vbsskripte.txt
D:\temp\accounts\gast\player3\setipconfig2IP.txt
D:\temp\accounts\gast\player3\vbsskripte.txt
D:\temp\accounts\gast\player56\setipconfig2IP.txt
D:\temp\accounts\gast\player56\vbsskripte.txt
D:\temp\accounts\user19\megashooter\setipconfig2IP.txt
D:\temp\accounts\user19\megashooter\vbsskripte.txt
D:\temp\accounts\user19\supershooter\serverlog.txt <font color=green> .....die war schon vorher da </font>
D:\temp\accounts\user19\supershooter\setipconfig2IP.txt
D:\temp\accounts\user19\supershooter\vbsskripte.txt

Voila, die beiden template\*.txt-Dateien sind da, wo sie hingehören. QED.
Warum unnötig kompliziert machen.

--------snipp CopyTemplatesII.bat
@for /r W:\Spiele\Accounts %%a in (.) do @if exist %%a.\..\..\template copy %%a.\..\..\template\*.txt %%a >NUL
--------snapp CopyTemplatesII.bat

HTH Biber
Bitte warten ..
Mitglied: Jediman
23.08.2005 um 15:03 Uhr
AHHHHHH

Super Danke! Damit kann ich jetzt was anfangen

Vielen lieben Dank für deine Mühe


Gruss Jediman
Bitte warten ..
Ähnliche Inhalte
Windows Tools
Gleiche Verzeichnisse finden
gelöst Frage von thilo-55Windows Tools32 Kommentare

Hallo zusammen, evtl. hat ja jemand einen guten Tipp für für mich - eigentlich dachte ich, die Lösung meines ...

Batch & Shell

Nicht doppelt vorhandene Dateien (nur Name) finden

gelöst Frage von dareboBatch & Shell4 Kommentare

Ich bin auf der Suche nach einer einfachen Möglichkeit (z.B. Batchlösung mit Ausgabe) viele Dateien (größer 500.000) nur nach ...

Batch & Shell

Per Batch Verzeichnisse umbenennen

Frage von KirschiBatch & Shell2 Kommentare

Hallo, bisher habe ich für 2 Instanzen eines Programmes, welches Daten im Verzeichnis %appdata% benutzt, eine simple Batch verwendet. ...

Batch & Shell

Nonsense Error - find ihn nicht. (Batch)

gelöst Frage von clragonBatch & Shell7 Kommentare

Hey Leute! Ich bin's wieder. Heute habe ich ein besonders unnötiges Problem,. Aus irgendeinem Grund hat dieses Script einen ...

Neue Wissensbeiträge
Ausbildung

Linux-Ausstieg in Niedersachsen - Windows statt Bugfix

Information von StefanKittel vor 1 TagAusbildung14 Kommentare

Sind ja nur Steuergelder

Speicherkarten

Neuer Speicherkartentyp - zunächst nur für Huawei-Smartphones (künftig auch für Notebooks u. Tablets?)

Tipp von VGem-e vor 3 TagenSpeicherkarten3 Kommentare

Servus, als ob das "Chaos" i.S. Speicherkarten noch nicht groß genug wäre?! Evtl. kommt dieser neue Kartentyp bald auch ...

Sicherheit

Diverse D-Link-Router durch drei Schwachstellen kompromittierbar

Information von kgborn vor 3 TagenSicherheit1 Kommentar

Hat jemand D-Link-Router in Verwendung? Einige Modelle sind sicherheitstechnisch offen wie ein Scheunentor. Äußerst unschöne Sache, aber nichts neues ...

Hardware

100.000 Mikrotik-Router ungefragt von Hacker abgesichert

Information von 7Gizmo7 vor 4 TagenHardware3 Kommentare

Hallo zusammen, da hier ja öfters mal von Mikrotik gesprochen wird. Trotz Updates klafft eine Sicherheitslücke in Hundertausenden Mikrotik-Routern. ...

Heiß diskutierte Inhalte
Vmware
Offene LDAP-Server in AS
gelöst Frage von obi-wan-kenobiVmware19 Kommentare

Hallo alle Miteinander, ich habe ein Problem, unsere VM-Ware Appliance (Version. 6.5.0.10000) ist scheinbar angreifbar. Wir haben eben die ...

Ausbildung
Linux-Ausstieg in Niedersachsen - Windows statt Bugfix
Information von StefanKittelAusbildung14 Kommentare

Sind ja nur Steuergelder

Windows 10
Windows 10 Spracherkennung - Eure Meinungen?
Frage von honeybeeWindows 1013 Kommentare

Hallo, wollte heute mal aus Neugier die Spracherkennung unter Windows 10 (Version 1803) ausprobieren und war mehr wie enttäuscht. ...

Windows Server
Zertifikat RemoteDesktop hinterlegen
gelöst Frage von Green14Windows Server12 Kommentare

Hallo zusammen. ich habe mehrere Server (WinSrv 2016). Die Server sind in keiner Domäne und keine Terminalserver. Ich verbinde ...