MudGuard: WinXP Cmd.exe: Name des parent-folders in variable setzen

Hi und schönen Feiertag!

Ich steh irgendwie auf dem Schlauch, ich brauch in einem .bat unter Windows XP eine Möglichkeit, den Namen des übergeordneten Ordners (ohne den kompletten Pfad) in eine Variable zu setzen.

Mit
dir /AD /B ..
bekomme ich den Namen.
Aber ich krieg den nicht in eine Variable.

Mit den von Unix gewohnten backticks geht's nicht:
set PARENT=dir /AD /B ..
echo %PARENT%
gibt
dir /AD /B ..
aus.

In der Hilfe zu set (und auch bei Google) hab ich nichts passendes gefunden.

Kann mir jemand sagen, wie das geht? (oder schlimmstenfalls, daß es nicht geht)

Danke im voraus!

cu,
Andreas

--
Warum nennt sich Andreas hier MudGuard?
O o ostern ...
Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  1. Hellihello MudGuard,

    Mit
    dir /AD /B ..
    bekomme ich den Namen.
    Aber ich krieg den nicht in eine Variable.

    Mit den von Unix gewohnten backticks geht's nicht:
    set PARENT=dir /AD /B ..
    echo %PARENT%
    gibt
    dir /AD /B ..
    aus.

    Kann mir jemand sagen, wie das geht? (oder schlimmstenfalls, daß es nicht geht)

    Vinzenz ist der einzige von dem ich weiß, dass er sowas weiß.

    Gruß,

    frankx

    1. Hi,

      Vinzenz ist der einzige von dem ich weiß, dass er sowas weiß.

      Danke, hat aber leider auch (noch) nicht das richtige.

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  2. Grüsse

    In der Hilfe zu set (und auch bei Google) hab ich nichts passendes gefunden.

    Mit etwas fantasie gehts mit SET:

    ----Script1.bat------

    SET /p TEST=Auf eingabe warten:
    echo %TEST%

    Aufruf:

    dir /AD /B |Script1.bat

    d.h. die ausgabe von "DIR /AD /B" befindet sich jetzt in der Variable TEST. Weiss nicht wie sich das mit Zeilenumbrüchen verhält...

    gruss

    lightfly

    1. Hi,

      Mit etwas fantasie gehts mit SET:
      ----Script1.bat------

      SET /p TEST=Auf eingabe warten:
      echo %TEST%

      Aufruf:
      dir /AD /B |Script1.bat

      Muß ich mal gucken, ob ich den Aufruf so manipulieren kann.
      Aber Vinzenz hat mich ja schon auf das Problem aufmerksam gemacht, daß dir /AD /B nicht nur das gewünschte Verzeichnis ausgibt.

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. Aber Vinzenz hat mich ja schon auf das Problem aufmerksam gemacht, daß dir /AD /B nicht nur das gewünschte Verzeichnis ausgibt.

        Spontan würde ich hier dann doch auf eine kleine vbscript hilfe zurückgreife (fals möglich):

        test.vbs---------------------

        Pfad = split(WScript.ScriptFullName,"")
        wscript.echo Pfad (ubound(Pfad)-2)

        Aufruf im batch:

        cscript test.vbs //NoLogo

        Das script gibt nur den namen des übergeordneten ordners zurück, welchen du nun wieder per Set /p in eine Variable rein kriegst.

        gruss

        lightfly

  3. Hallo MudGuard,

    Mit
    dir /AD /B ..
    bekomme ich den Namen.

    aber nur, wenn im übergeordneten Verzeichnis genau ein Unterverzeichnis
    enthalten ist.

    Kann mir jemand sagen, wie das geht? (oder schlimmstenfalls, daß es nicht geht)

    Mit

    @ECHO OFF
    FOR /F %%A IN ('DIR /AD /B ..') DO SET MYDIR=%%A
    ECHO %MYDIR%

    bekommst Du das letzte Verzeichnis im übergeordneten Verzeichnis.
    Gibts nur eins, dann ist es das gesuchte :-)

    Freundliche Grüße

    Vinzenz

    1. Hi,

      Mit
      dir /AD /B ..
      bekomme ich den Namen.

      aber nur, wenn im übergeordneten Verzeichnis genau ein Unterverzeichnis
      enthalten ist.

      Mist, das habe ich übersehen, weil's bei meinem Versuch tatsächlich das einzige ist.
      Da das aber nicht der Fall sein wird und das parent-Verzeichnis auch nicht (egal nach welcher Sortierung) das letzte sein muß, kommt auch

      @ECHO OFF
      FOR /F %%A IN ('DIR /AD /B ..') DO SET MYDIR=%%A
      ECHO %MYDIR%

      nicht wirklich in Frage.

      Andere Idee:
      SET MYDIR=%CD%
      liefert mir das richtige Verzeichnis.
      Aber leider mit kompletten Namen, also z.B. c:\test\bla\blubb

      Wie kann ich daraus das "blubb" extrahieren?

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    2. gudn tach!

      fuers archiv...

      Mit

      @ECHO OFF
      FOR /F %%A IN ('DIR /AD /B ..') DO SET MYDIR=%%A
      ECHO %MYDIR%

      bekommst Du das letzte Verzeichnis im übergeordneten Verzeichnis.

      allerdings nicht, falls leerzeichen im namen sind.

      Gibts nur eins, dann ist es das gesuchte :-)

      eine sicherere methode laesst sich mittels "cd" realisieren.

      in meiner anderen antwort habe ich einen solchen vorschlag genannt.

      prost
      seth

  4. gudn tach!

    Ich steh irgendwie auf dem Schlauch, ich brauch in einem .bat unter Windows XP eine Möglichkeit, den Namen des übergeordneten Ordners (ohne den kompletten Pfad) in eine Variable zu setzen.

    mit cd erhaelt man den aktuellen pfad, davon muss man dann eigentlich bloss nach was rausschneiden.

    In der Hilfe zu set (und auch bei Google) hab ich nichts passendes gefunden.

    nach ms-logik haettest du bei "for" suchen muessen, oder hast du etwa nicht gemerkt, dass du eigentlich eine schleife willst? *ironie_schild_hochhalt*

    Kann mir jemand sagen, wie das geht?

    ja.

    da gibt's mehrere moeglichkeiten. die beste, die mir gerade einfaellt ist:
    for /f "usebackq delims=/" %a in (cd) do set verz=%~nxa

    wichtig ist "delims=/", damit z.b. leerzeichen nicht als trennzeichen verstanden werden. "%~nxa" fuehrt oben genanntes ausschneiden durch. weitere erklaerung in "help for". ach so, in batch-files muess doppelte %-zeichen verwendet werden.

    prost
    seth

    1. Hi,

      nach ms-logik haettest du bei "for" suchen muessen, oder hast du etwa nicht gemerkt, dass du eigentlich eine schleife willst? *ironie_schild_hochhalt*

      Nicht wirklich ...

      ja.

      Sehr gut!

      da gibt's mehrere moeglichkeiten. die beste, die mir gerade einfaellt ist:
      for /f "usebackq delims=/" %a in (cd) do set verz=%~nxa

      Das funktioniert. Super.

      Jetzt muß ich das nur noch analysieren, daß ich es auch verstehe ...

      wichtig ist "delims=/", damit z.b. leerzeichen nicht als trennzeichen verstanden werden. "%~nxa" fuehrt oben genanntes ausschneiden durch. weitere erklaerung in "help for". ach so, in batch-files muess doppelte %-zeichen verwendet werden.

      Vielen Dank!
      (natürlich auch an alle anderen, die hier mitgearbeitet haben)

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    2. Hi,

      for /f "usebackq delims=/" %a in (cd) do set verz=%~nxa

      funktioniert, wenn ich es direkt im cmd.exe eintippe.
      In einer .bat-Datei kommt aber
      "~nxa" ist syntaktisch an dieser Stelle nicht verarbeitbar.

      Ah, ich muß (warum auch immer) die % zu %% machen.
      Egal, jetzt geht's.

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  5. Hallo Andreas,

    kleine (evtl. blöde) Frage zwischendurch: Warum nimmst Du eigentlich nicht den Windows Scripting Host? Ich meine, ich mag Visual Basic zwar auch nicht wirklich, aber es ist in meinen Augen noch WESENTLICH angenehmer zu programmieren, als mit den Befehlen, die Dir CMD.EXE zur Verfügung stellt.

    Viele Grüße,
    Christian

    1. Hi,

      kleine (evtl. blöde) Frage zwischendurch: Warum nimmst Du eigentlich nicht den Windows Scripting Host? Ich meine, ich mag Visual Basic zwar auch nicht wirklich, aber es ist in meinen Augen noch WESENTLICH angenehmer zu programmieren, als mit den Befehlen, die Dir CMD.EXE zur Verfügung stellt.

      1. weil ich Visual Basic nicht wirklich mag und auch nicht wirklich kann.
      2. geht es hier um eine Änderung in einem bestehenden Riesen-Batch-File - das will ich _jetzt_ nicht komplett umbauen.
      3. wenn ich's komplett umschreiben müßte, würde es wohl ein Perlscript werden.

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. Hallo

        kleine (evtl. blöde) Frage zwischendurch: Warum nimmst Du eigentlich nicht den Windows Scripting Host? Ich meine, ich mag Visual Basic zwar auch nicht wirklich, aber es ist in meinen Augen noch WESENTLICH angenehmer zu programmieren, als mit den Befehlen, die Dir CMD.EXE zur Verfügung stellt.

        1. weil ich Visual Basic nicht wirklich mag und auch nicht wirklich kann.

        wo ist das Problem? Dann verwende eben JScript, Python oder Perl.
        Ja, der Windows Scripting Host unterstützt nicht nur VB-Script.

        1. geht es hier um eine Änderung in einem bestehenden Riesen-Batch-File - das will ich _jetzt_ nicht komplett umbauen.

        Das ist ein Argument.

        Freundliche Grüße

        Vinzenz

    2. Hallo Christian,

      kleine (evtl. blöde) Frage zwischendurch: Warum nimmst Du eigentlich nicht den Windows Scripting Host? Ich meine, ich mag Visual Basic zwar auch nicht wirklich,

      Du kannst doch auch JScript nehmen, wenn Dir VB-Script nicht zusagt :-)

      aber es ist in meinen Augen noch WESENTLICH angenehmer zu programmieren, als mit den Befehlen, die Dir CMD.EXE zur Verfügung stellt.

      In der Tat.

      Freundliche Grüße

      Vinzenz