WinXP Cmd.exe: Name des parent-folders in variable setzen
MudGuard
- programmiertechnik
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
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
Hi,
Vinzenz ist der einzige von dem ich weiß, dass er sowas weiß.
Danke, hat aber leider auch (noch) nicht das richtige.
cu,
Andreas
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
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
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
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
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
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
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
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
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
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
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
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.
- 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.
- 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
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