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

Name eines Verzeichnisses per batch finden und damit weiterarbeiten?

Frage Entwicklung Batch & Shell

Mitglied: Jediman

Jediman (Level 1) - Jetzt verbinden

21.08.2005, aktualisiert 23.08.2005, 9226 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(4)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch-Skript: Messdaten in Textdatei finden und in eine neue Datei schreiben (5)

Frage von habmalnefrage zum Thema Batch & Shell ...

Batch & Shell
gelöst Nicht doppelt vorhandene Dateien (nur Name) finden (4)

Frage von darebo zum Thema Batch & Shell ...

Batch & Shell
Batch zum bearbeiten mehrerer CSV (2)

Frage von Matzus87 zum Thema Batch & Shell ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 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 ...

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

Frage von Haures zum Thema Windows Server ...

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

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (17)

Frage von Unwichtig zum Thema Netzwerkmanagement ...