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

BATCH Erweiterung von Laufvariablen so das ich nur den Lezten Ordner der Pfad angabe ohne Schrägstrich als ausgabe habe.

Frage Entwicklung Batch & Shell

Mitglied: Darkprodukt

Darkprodukt (Level 1) - Jetzt verbinden

10.07.2012, aktualisiert 10:05 Uhr, 2508 Aufrufe, 6 Kommentare

Ich habe eine Datei Tempdatp.txt die mit Dateipfaden gefüllt ist aber ohne die Dateinamen.

Also so:
01.
C:\Users\Benutzername\Desktop\Bilder\ 
02.
C:\Users\Benutzername\Desktop\Bilder\ 
03.
C:\Users\Benutzername\Desktop\Bilder\ 
04.
C:\Users\Benutzername\Filme\ 
05.
C:\Users\Benutzername\Filme\ 
06.
C:\Users\Benutzername\ 
07.
C:\Users\Benutzername\Daten\ 
08.
C:\Users\Benutzername\Desktop\Daten\ 
09.
C:\Programme\  
10.
C:\User\  
11.
C:\User\Benutzername2\  
12.
C:\Users\Benutzername2\Desktop\  
13.
...
Diese Liste wird mit
01.
for /f "usebackq delims=" %%i in ("Struck.txt") do for /f "delims=" %%j in ('dir /a-s-h-d /b /s "%%~i"') do echo %%~dpj >>%TEMP%\tempdatp.txt
erstellt.

Als ausgabe bruchte ich
01.
Bilder 
02.
Bilder 
03.
Bilder 
04.
Filme 
05.
Filme 
06.
Benutzername 
07.
Daten 
08.
Daten 
09.
....
Wenn es möglich ist kan es auch gleich mit einer abgeänderten for-schleife gemacht werden. Der Zwischenschritt ist nicht nötig.

Habe mich mit diesem Tut auseinandergesetzt und "Erweiterung von Laufvariablen" gefunden (was ich schon teilweise wuste), aber eben nicht wie ich nur den Ordner bekomme. http://www.administrator.de/contentid/155681

Grüße
Darkprodukt
Mitglied: bastla
10.07.2012, aktualisiert um 10:38 Uhr
Hallo Darkprodukt!

Nur mal kurz:
01.
@echo off &setlocal 
02.
for /f "usebackq delims=" %%a in ("tempdatp.txt") do ( 
03.
  set "ln=%%a" 
04.
  setlocal EnableDelayedExpansion 
05.
    for %%b in ("!ln:\=" "!") do if %%b neq "" set "Ordner=%%~b" 
06.
    echo !Ordner! 
07.
  endlocal 
08.
09.
pause
- das sollte Dir doch irgendwie bekannt vorkommen ...

Unter Vermeidung der Zwischendatei dann etwa so:
01.
@echo off &setlocal 
02.
for /f "usebackq delims=" %%i in ("Struck.txt") do for /f "delims=" %%j in ('dir /a-s-h-d /b /s "%%~i"') do ( 
03.
    set "ln=%%~dpj" 
04.
    setlocal EnableDelayedExpansion 
05.
      for %%b in ("!ln:\=" "!") do if %%b neq "" set "Ordner=%%~b" 
06.
      echo !Ordner! 
07.
    endlocal 
08.
09.
pause
Weitere Alternative: Ersetze die Zeilen 4 bis 7 durch
01.
  setlocal EnableDelayedExpansion 
02.
    for %%b in ("!ln:~,-1!") do echo %%~nxb 
03.
  endlocal
- nachdem der "\" am Ende abgetrennt ist, kann der Ordnername wie ein Dateiname behandelt (und demzufolge isoliert) werden ...

Grüße
bastla
Bitte warten ..
Mitglied: Darkprodukt
10.07.2012 um 15:18 Uhr
Die Strucktur sieht bekannt aus.

Aber ich verstehe Zeile 05 nicht.

In der vorschleife wird der von Zeile 02 übergebene Strink von Hinten
nach vorne gelsen deshalb !In nehme ich an.
Danach wird bis zum ersten "\" gelesen, wobei der erste Ignoriert wird.

Alles gelesene ist in %%b.

In der if anweisung wird nun geschaut ob %%b überhaupt etwas enthält
und fals sie was enthält wird sie in die Variable Ordner geschrieben,
die Wiederum ausgegeben wird.

Stimmt das so?
Fungtioniert das auch mit ! im Namen?
Weil ("!ln:\=" "!") oder wozu ist das --> "!" gut?
Bitte warten ..
Mitglied: bastla
10.07.2012, aktualisiert um 16:28 Uhr
Hallo Darkprodukt!
In der vorschleife wird der von Zeile 02 übergebene Strink von Hinten
nach vorne gelsen deshalb !In nehme ich an.
Keineswegs - bei Verwendung von "delayedexpansion" werden Variablennamen anstatt mit "%" mit "!" geschrieben - daher also nicht %ln% sondern !ln!.
Danach wird bis zum ersten "\" gelesen, wobei der erste Ignoriert wird.
Wieder daneben - es wird das letzte Zeichen (der störende "\") abgeschnitten.
Alles gelesene ist in %%b.
Auch nicht ganz richtig - durch die Ersetzung der Trennzeichen (dieses Mal nicht _ sondern eben \) durch " " werden alle Pfadbestandteile der Reihe nach in %%b übernommen - da jedes Mal der Inhalt von %%b (wenn es denn einen gibt, deshalb die Abrage nach "") in die Variable Ordner geschrieben wird, steht am Ende der letzte Pfadbestanteil in der Variablen - anhand der ersten Beispielzeile hat die Variable daher in der Schleife der Reihe nach die Inhalte
01.
C: 
02.
Users 
03.
Benutzername 
04.
Desktop 
05.
Bilder
- da der letzte Inhalt nicht mehr überschrieben wird, ist das Ergebnis dann eben "Bilder" und dieses wird in der nächsten Zeile ausgegeben ...
Fungtioniert das auch mit ! im Namen?
Abgesehen davon, dass Du das ja wohl schon hättest testen können: leiner nein - als Workaround kann ein Unterprogramm verwendet werden:
01.
@echo off &setlocal 
02.
for /f "usebackq delims=" %%i in ("Struck.txt") do for /f "delims=" %%j in ('dir /a-s-h-d /b /s "%%~i"') do set "ln=%%~dpj" & call :ProcessLine 
03.
pause 
04.
goto :eof 
05.
 
06.
:ProcessLine 
07.
for %%b in ("%ln:\=" "%") do if %%b neq "" set "Ordner=%%~b" 
08.
echo %Ordner%
Grüße
bastla
Bitte warten ..
Mitglied: Darkprodukt
10.07.2012 um 17:01 Uhr
Ok, hab hinter echo %Ordner% natürlich noch >>%TEMP%\tempdato.txt gesetzt und die Sprungmarke :ProcessLine ans ende meiner (220 Zeilen) Datei gehängt.

Jezt hab ich aber einen komischen Fehler...
Ich habe 3 Ordner die so Heißen:
01.
Ordnername! 
02.
Ordnername 2 OVA 
03.
Ordnername 2
Jezt schaut meine ausgabe so aus:
01.
Ordnername! //+ Für jede Datei einmal 
02.
Ordnername 2 OVA //+Für jede Datei einmal
Auserdem bekomme ich als echo Ordnername //+ Für jede Datei und auserdem fehlt die Zahl.

Wiso bekomme ich das als echo ich habs doch in die Datei geleitet... auserdem fehlt jezt die Zahl
Bitte warten ..
Mitglied: bastla
10.07.2012, aktualisiert um 20:24 Uhr
Hallo Darkprodukt!

Dass es den Ordnernamen für jede einzelne Datei gibt, ist klar (und auch in Deinem Beispiel oben schon so und war bisher auch nicht anders gewünscht) ...
Ok, hab hinter echo %Ordner% natürlich noch >>%TEMP%\tempdato.txt gesetzt
Zweitbeste Variante - schreib die Umleitung davor, also:
>>%TEMP%\tempdato.txt echo %Ordner%
und das Verschwinden der Zahl ist Geschichte ...

Hindergrund: Wenn in %Ordner% "Ordnername 2" steht, bewirkt die Zeile
echo %Ordner%>>%TEMP%\tempdato.txt
aufgelöst
echo Ordnername 2>>%TEMP%\tempdato.txt
und damit die Umleitung nur der Ausgabe einer Fehlermeldung auf STDERR (Kanal 2) in die Datei "%TEMP%\tempdato.txt" (und da kommt natürlich nix, da ja kein Fehler auftritt) ...

Grüße
bastla
Bitte warten ..
Mitglied: Darkprodukt
10.07.2012 um 17:40 Uhr
Ok danke

Super Hilfe

Grüße Darkprodukt
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

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

Ähnliche Inhalte
Batch & Shell
gelöst Per Batch Winrar entpacken - Probleme bei Pfad (7)

Frage von Concurve zum Thema Batch & Shell ...

Batch & Shell
gelöst Per Batch Dateien in einen Ordner - ext. Festplatte übertragen (2)

Frage von tocksick zum Thema Batch & Shell ...

Batch & Shell
gelöst Per FTP-Shell oder Batch in ein unbekanten Ordner wechseln (8)

Frage von Ducky2 zum Thema Batch & Shell ...

Batch & Shell
Batch: .rar-Pakete automatisch Ordner erstellen und verschieben (2)

Frage von BowserMD zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

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

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...