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

Per Batch übergeordnetes Verzeichnis finden

Frage Entwicklung Batch & Shell

Mitglied: Wenzel

Wenzel (Level 1) - Jetzt verbinden

03.03.2009, aktualisiert 18.10.2012, 7904 Aufrufe, 6 Kommentare

Sodann will ich mal meine erste Frage hier loswerden

Hallo Allerseits,
ich möchte eine Pfadangabe einer Datei nach dem übergeordnetem Ordnernamen auswerten.

Warum ich das brauche:
Ich habe eine Ordnerstruktur:
C:\IrgendeinPfad\Hauptordner
C:\IrgendeinPfad\Hauptordner\Ordner1
C:\IrgendeinPfad\Hauptordner\Ordner2
C:\IrgendeinPfad\Hauptordner\Ordner3

In diesen Ordnern liegen Dateien, die immer Datei.xml heissen.
Wenn ich den Hauptordner inkl. Unterordner nach *.xml Dateien durchsuche, bekomme ich eine Dateiliste wie folgt:
C:\IrgendeinPfad\Hauptordner\Datei.xml
C:\IrgendeinPfad\Hauptordner\Ordner1\Datei.xml
C:\IrgendeinPfad\Hauptordner\Ordner2\Datei.xml
C:\IrgendeinPfad\Hauptordner\Ordner3\Datei.xml

Diese sollen in ein neues Zielverzeichnis kopiert werden, daher möchte/muss ich die Dateien umbenennen:
Pfad\Zielordner\Hauptordner.xml
Pfad\Zielordner\Ordner1.xml
Pfad\Zielordner\Ordner2.xml
Pfad\Zielordner\Ordner3.xml

Den Hauptordner übergebe ich an das Batch-Skript
Ich habe hier schon einiges "geschau_klaut"
Nur reicht mir meine bisherige Lösung nicht, da ich die xml-Datei des Hauptordners nicht erwische...

Hier mal mein Code
01.
  
02.
set tempDir=C:\temp\GesammelteXMLDateien 
03.
if "%~1"=="" ( goto NODIR ) 
04.
for /d %%v in ("%~1\*.*") do (  
05.
    for /f "delims=" %%d in ('dir /b /od "%%v\*.plmxml" 2^>nul^') do ( 
06.
		copy "%%v\%%d" "%tempDir%\%%~nxv%%~xd" 
07.
	)  
08.
)


Schön wäre, wenn ich nicht so umständlich die Ordnernamen suchen muss, sondern einfach den String (Bsp: C:\IrgendeinPfad\Hauptordner\Ordner1\Datei.xml) auswerte und alles zwischen letztem und vorletztem Backslash bekommen (in diesem Fall den String "Ordner1").

Vielen Dank schon mal an die Cracks hier...
Mitglied: bastla
03.03.2009, aktualisiert 18.10.2012
Hallo Wenzel und willkommen im Forum!

Eigentlich ging es neulich in diesem Thread um die gleiche Problemstellung ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
03.03.2009 um 21:33 Uhr
Moin Wenzel,

willkommen im Forum.
Schön wäre, wenn ich nicht so umständlich die Ordnernamen suchen muss, sondern einfach den String (Bsp: C:\IrgendeinPfad\Hauptordner\Ordner1\Datei.xml) auswerte und alles zwischen letztem und vorletztem Backslash bekommen (in diesem Fall den String "Ordner1").

Klare Anforderungen sind mir die Liebsten...
Demo zum Nachkaspern am CMD-Prompt (erste Zeile ist Eingabe, zweite Zeile Ausgabe]:
01.
for %i in ("C:\IrgendeinPfad\Hauptordner\Ordner1\Datei.xml\..") do @for %i in ("%~i") do @echo Set "ParentDir=%~ni" 
02.
Set "ParentDir=Ordner1"
[Geht unabhängig davon, ob C:\....Datei.xml existiert oder nicht]

Abgewandelt auf einen Batch, der mit dem Parameter "C:\IrgendeinPfad\Hauptordner\Ordner1\Datei.xml" [in Anführungszeichen] gerufen wird:
01.
 @echo off & setlocal 
02.
set tempDir=C:\temp\GesammelteXMLDateien 
03.
if "%~1"=="" ( goto NODIR ) 
04.
REM unoptimiert FOR %%i in ("%~1\..") do @for %%i in ("%%~i") do copy "%~1" "%tempdir%\%%~ni.XML" 
05.
FOR %%i in ("%~1\..") do @copy "%~1" "%tempdir%\%%~ni.XML"
[ungetestet]
[Edit] Optimierung durch bastla nachgezogen[/Edit]

Grüße
Biber
Bitte warten ..
Mitglied: bastla
03.03.2009 um 21:48 Uhr
@Biber
Sehr elegant - aber wozu das zweite "for"?

Grüße
bastla
Bitte warten ..
Mitglied: Biber
03.03.2009 um 21:58 Uhr
Moin bastla,

...aber wozu das zweite "for"?
Ich dachte, wenn ich es nicht ein bisschen aufbausche, dann merkt jede/r wie einfach das Bätschen ist...

Okay, ich gebs zu:
01.
for %i in ("C:\IrgendeinPfad\Hauptordner\Ordner1\Datei.xml\..") do @echo Set "ParentDir=%~ni" 
02.
Set "ParentDir=Ordner1"
.... reicht völlig aus...

Grüße
Biber
Bitte warten ..
Mitglied: Wenzel
03.03.2009 um 23:58 Uhr
Hallo bastla, hallo Biber,
vielen Dank für die schnellen Antworten.
Ich habe Bibers Lösung bei mir reingebastelt, bei mir wird ja nicht ein Dateinamen, sondern der hauptordner übergeben, dann sieht das so aus:

01.
set tempDir=C:\temp\GesammelteXMLDateien  
02.
rem Abfrage, ob Parameter übergeben wurde... 
03.
FOR /F "delims=" %%i in ('dir /b /s /a-d "%~1\*.xml"') do (  
04.
	for %%v in ("%%i\..") do (  
05.
		Echo copy "%%i" "%tempDir%\%%~nv.xml" 
06.
07.
08.
pause
Natürlich muss das Echo in der "scharfen" Version noch raus, aber da geht es um mehrere Dateien mit jeweils bis zu 70 MB, und die remote rumzuschaufeln macht keinen Spass...

Gibt es da irgendwelche Einwände von Euch beiden Profis, wenn nein, dann setze ich mal den Haken bei gelöst...

Cool, wie einfach die Lösung ist.
Bitte warten ..
Mitglied: Wenzel
04.03.2009 um 00:00 Uhr
Zitat von Biber:
Moin Wenzel,
Klare Anforderungen sind mir die Liebsten...
Grüße
Biber

Klare Antworten sind mir die Liebsten

Vielen Dank, genau danach habe ich gesucht!!!

Gruß vom Wenzel
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...