Pfad zerlegen und dann Variablen zuordnen
Hi,
ich bin der Neue und werde wahrscheinlich noch eine menge Fragen stellen
habe gerade folgendes vor und finde keine Lösung dafür, suche aber schon Fieberhaft danach!
Zuerst in etwa meine verwendete Ordner-Struktur:
F:\PRG_1\PRG_2\MAIN\SUB1\SUB_VAR1\FOLDER_VAR1\START.BAT
F:\PRG_1\PRG_2\MAIN\SUB1\SUB_VAR1\FOLDER_VAR2\START.BAT
F:\PRG_1\PRG_2\MAIN\SUB1\SUB_VAR2\FOLDER_VAR3\START.BAT
F:\PRG_1\PRG_2\MAIN\SUB1\SUB_VAR3\FOLDER_VAR4\START.BAT
usw.
Die Ordner \SUB_VAR#\ sowie der Ordner \FOLDER_VAR#\ sind immer Variable und in beinah jedem dieser Ordner-Zweige soll sich am Ende also \FOLDER_VAR#\ dann später einmal meine START.BAT befinden.
Wie kann ich nun, aus meinem Batch (START.BAT), dem ich im Ordner \FOLDER_VAR#\ starte
1. Nur die zwei übergeordneten Ordner in eine Variable setzen?
Wenn man in START.BAT den kompletten Pfad mit SET „PFAD=%CD%“ setzt. Wie kann ich dann den Bereich im Pfad mit „SUB1\SUB_VAR#\“ in eine Variable %SUB.FOLDER% bringen.
Der Wert %SUB.FOLDER% sollte also dann so aussehen „SUB1\SUB_VAR#\“
2. In der Regel (oder immer) sind es zwei Ordner-Ebenen von \MAIN\ bis \FOLDER_VAR#\. Aber Eleganter wäre es natürlich gleich eine Lösung, wenn man in dem Ordner F:\PRG_1\PRG_2\MAIN nach einem festem Programm sucht (zB: MAIN.EXE) und dann die Ordner-Struktur von da bis eine Ebene unter dem ausgeführten START.BAT Ordner ermitteln könnte. (Falls man vielleicht die Ordner-Struktur doch einmal ändert.)
Wie könnte man das den machen?
3. Da ich dem Pfad nur bis eine Ebene unter dem ausgeführten START.BAT Ordner brauche.
Brauche ich in einer anderen Variable noch den Namen des Ordners selber, in dem sich die START.BAT befindet, also %BAT.FOLDER% sollte dann „FOLDER_VAR#“ sein. Das bekomme ich auch einfach nicht hin wie das gehen soll?
4. Und weil ich jetzt schon dabei bin
Das nächste wäre dann noch, das ich mir im Ordner \MAIN\ (ebenfalls mit einer BATCH) ein Start-Menue anlege. Das selbstständig in einer Auswahl-Liste alle Ordner in F:\PRG_1\PRG_2\MAIN\SUB1\SUB_VAR#\.. anzeigt in der sich eine START.BAT befindet und diese dann durch Auswahl des Ordner-Namens im Menu starten lässt.
Im Weiteren müsste ich das Menu noch getrennt in Unter-Menus für ca. 3 dieser Ordner-Strukturen ausbauen können.
also zB:
Haupt-Menu
-Unter-Menu1 für C:\PRG_1\PRG_2\MAIN\SUB1\SUB_VAR1\..
-Unter-Menu2 für C:\PRG_1\PRG_2\MAIN\SUB1\SUB_VAR2\..
-Unter-Menu3 für C:\PRG_1\PRG_2\MAIN\SUB1\SUB_VAR3\..
Einen Anhaltspunkt zum auflisten der Ordner in \SUB_VAR#\ habe ich schon
SET MAIN=%cd%
DIR /B %MAIN%\ SUB1\SUB_VAR1
Aber natürlich fehlt mir, das vorher nicht in den Ausgegebenen Ordnern nach einer START.BAT gesucht wird und das ich die Angezeigten Ordner nicht in ein Menu zum auswählen bekomme mit dem ich dann einfach die START.BAT starten kann die im jeweiligem Ordner auch vorhanden ist.
Allein komme ich da nicht weiter und meine Versuche habens nicht gebracht. Wär für alle Hilfe dankbar die mir bei meinen Problemen weiter helfen kann. Bye,
ich bin der Neue und werde wahrscheinlich noch eine menge Fragen stellen
habe gerade folgendes vor und finde keine Lösung dafür, suche aber schon Fieberhaft danach!
Zuerst in etwa meine verwendete Ordner-Struktur:
F:\PRG_1\PRG_2\MAIN\SUB1\SUB_VAR1\FOLDER_VAR1\START.BAT
F:\PRG_1\PRG_2\MAIN\SUB1\SUB_VAR1\FOLDER_VAR2\START.BAT
F:\PRG_1\PRG_2\MAIN\SUB1\SUB_VAR2\FOLDER_VAR3\START.BAT
F:\PRG_1\PRG_2\MAIN\SUB1\SUB_VAR3\FOLDER_VAR4\START.BAT
usw.
Die Ordner \SUB_VAR#\ sowie der Ordner \FOLDER_VAR#\ sind immer Variable und in beinah jedem dieser Ordner-Zweige soll sich am Ende also \FOLDER_VAR#\ dann später einmal meine START.BAT befinden.
Wie kann ich nun, aus meinem Batch (START.BAT), dem ich im Ordner \FOLDER_VAR#\ starte
1. Nur die zwei übergeordneten Ordner in eine Variable setzen?
Wenn man in START.BAT den kompletten Pfad mit SET „PFAD=%CD%“ setzt. Wie kann ich dann den Bereich im Pfad mit „SUB1\SUB_VAR#\“ in eine Variable %SUB.FOLDER% bringen.
Der Wert %SUB.FOLDER% sollte also dann so aussehen „SUB1\SUB_VAR#\“
2. In der Regel (oder immer) sind es zwei Ordner-Ebenen von \MAIN\ bis \FOLDER_VAR#\. Aber Eleganter wäre es natürlich gleich eine Lösung, wenn man in dem Ordner F:\PRG_1\PRG_2\MAIN nach einem festem Programm sucht (zB: MAIN.EXE) und dann die Ordner-Struktur von da bis eine Ebene unter dem ausgeführten START.BAT Ordner ermitteln könnte. (Falls man vielleicht die Ordner-Struktur doch einmal ändert.)
Wie könnte man das den machen?
3. Da ich dem Pfad nur bis eine Ebene unter dem ausgeführten START.BAT Ordner brauche.
Brauche ich in einer anderen Variable noch den Namen des Ordners selber, in dem sich die START.BAT befindet, also %BAT.FOLDER% sollte dann „FOLDER_VAR#“ sein. Das bekomme ich auch einfach nicht hin wie das gehen soll?
4. Und weil ich jetzt schon dabei bin
Das nächste wäre dann noch, das ich mir im Ordner \MAIN\ (ebenfalls mit einer BATCH) ein Start-Menue anlege. Das selbstständig in einer Auswahl-Liste alle Ordner in F:\PRG_1\PRG_2\MAIN\SUB1\SUB_VAR#\.. anzeigt in der sich eine START.BAT befindet und diese dann durch Auswahl des Ordner-Namens im Menu starten lässt.
Im Weiteren müsste ich das Menu noch getrennt in Unter-Menus für ca. 3 dieser Ordner-Strukturen ausbauen können.
also zB:
Haupt-Menu
-Unter-Menu1 für C:\PRG_1\PRG_2\MAIN\SUB1\SUB_VAR1\..
-Unter-Menu2 für C:\PRG_1\PRG_2\MAIN\SUB1\SUB_VAR2\..
-Unter-Menu3 für C:\PRG_1\PRG_2\MAIN\SUB1\SUB_VAR3\..
Einen Anhaltspunkt zum auflisten der Ordner in \SUB_VAR#\ habe ich schon
SET MAIN=%cd%
DIR /B %MAIN%\ SUB1\SUB_VAR1
Aber natürlich fehlt mir, das vorher nicht in den Ausgegebenen Ordnern nach einer START.BAT gesucht wird und das ich die Angezeigten Ordner nicht in ein Menu zum auswählen bekomme mit dem ich dann einfach die START.BAT starten kann die im jeweiligem Ordner auch vorhanden ist.
Allein komme ich da nicht weiter und meine Versuche habens nicht gebracht. Wär für alle Hilfe dankbar die mir bei meinen Problemen weiter helfen kann. Bye,
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 126389
Url: https://administrator.de/forum/pfad-zerlegen-und-dann-variablen-zuordnen-126389.html
Ausgedruckt am: 07.04.2025 um 05:04 Uhr
12 Kommentare
Neuester Kommentar
Hallo Hi-Robbie,
was die Punkte 1-3 angeht, könnte das etwa so aussehen, wenn man sich im Verzeichnis deiner start.bat befindet:
Was du allerdings in Punkt 4 vorhast... Naja, es ist nicht so, als würde man mit dem DIR Befehl nicht die paar Batches finden und auflisten können. Aber wie willst du daraus ein Startmenü basteln?
Grüße
rubberman
was die Punkte 1-3 angeht, könnte das etwa so aussehen, wenn man sich im Verzeichnis deiner start.bat befindet:
@echo off &setlocal
set exe=main.exe
set levels=0
:loop1
set /a levels+=1
if exist %exe% set "exelevel=%levels%"
if "%cd:~,-1%"=="%~d0" goto weiter1
cd..
goto loop1
:weiter1
cd "%~dp0"
set /a exelevel=%levels%-%exelevel%+1
set x=0
set batpath=%~dp0
:loop2
set /a x+=1
for /f "delims=\ tokens=1*" %%i in ("%batpath%") do set "teil%x%=%%i" &set "batpath=%%j"
if not defined batpath goto weiter2
goto loop2
:weiter2
call set "batfolder=%%teil%x%%%"
call set "exefolder=%%teil%exelevel%%%"
set /a ende=%exelevel%-1
for /l %%i in (1,1,%ende%) do call set "vorexe=%%vorexe%%\%%teil%%i%%"
set "vorexe=%vorexe:~1%"
set /a beginn=%exelevel%+1
set /a ende=%levels%-1
for /l %%i in (%beginn%,1,%ende%) do call set "subfolder=%%subfolder%%\%%teil%%i%%"
set "subfolder=%subfolder:~1%"
echo davor: %vorexe%
echo exe: %exefolder%
echo dazwischen: %subfolder%
echo bat: %batfolder%
pause
Was du allerdings in Punkt 4 vorhast... Naja, es ist nicht so, als würde man mit dem DIR Befehl nicht die paar Batches finden und auflisten können. Aber wie willst du daraus ein Startmenü basteln?
Grüße
rubberman
Hallo Hi-Robbie und willkommen im Forum, hallo rubberman!
Zu Punkt 4 ev etwas Ähnliches wie hier ...
Die "Sparvariante" (statisch "Großvater" und "Vater" des aktuellen Ordners) zu Punkt 1 könnte übrigens so aussehen:
Grüße
bastla
Zu Punkt 4 ev etwas Ähnliches wie hier ...
Die "Sparvariante" (statisch "Großvater" und "Vater" des aktuellen Ordners) zu Punkt 1 könnte übrigens so aussehen:
@echo off & setlocal
for /f "tokens=2*" %%i in ('dir..\..^|findstr /c:"Verzeichnis von"') do set "SUB.FOLDER=%%~nxj"
for /f "tokens=2*" %%i in ('dir..^|findstr /c:"Verzeichnis von"') do set "SUB.FOLDER=%SUB.FOLDER%\%%~nxj"
echo %SUB.FOLDER%
bastla
Hallo Hi-Robbie, hallo bastla!
Habs mit den Haupt- und Untermenüs aus Zeitgründen noch nicht geschafft genauer anzusehen. Aber vielleicht hilft bastla's Link bei dem Problem.
Eine einfache Auswahlstruktur könnte etwa so aussehen:
Grüße
rubberman
Habs mit den Haupt- und Untermenüs aus Zeitgründen noch nicht geschafft genauer anzusehen. Aber vielleicht hilft bastla's Link bei dem Problem.
Eine einfache Auswahlstruktur könnte etwa so aussehen:
@echo off &setlocal
:loop
cls
for /f "tokens=*" %%i in ('dir /a-d /b /on /s start.bat^|findstr /n .') do echo %%i
set /p "nummer=Waehle eine Nummer oder [a]bbrechen: "
if not defined nummer goto loop
if /i "%nummer:~,1%"=="a" goto :eof
for /f "delims=: tokens=1*" %%i in ('dir /a-d /b /on /s start.bat^|findstr /n .') do (
if "%%i"=="%nummer%" (
pushd "%%~dpj"
cmd /c "%%j"
popd
)
)
set "nummer="
goto :loop
Grüße
rubberman
Ah, verstehe. Eine Schleife arbeitet immer nur in eine Richtung. Das bedeutet, du kommst nicht umhin, vorher alle gefundenen Dateien in fortlaufende Variablen zu packen (im Beispiel start1, start2 ...).
Ungetestet etwa so:
Grüße
rubberman
Ungetestet etwa so:
:Auswahl
set /a nr=0
for /f "delims=" %%i in ('dir /a-d /b /on /s "%Liste%\start.bat"') do (
set /a nr+=1
call set "start%%nr%%=%%i"
)
set x=1
:loop
cls
if %x%==0 (echo Geht nicht!) &set /a x=1
if %x% gtr %nr% (echo Geht nicht!) &set /a x=%nr%
call set "startbat=%%start%x%%%"
echo ==============================
echo %name%
echo ==============================
echo %startbat%
echo ==============================
echo E(X)IT (N)ext (B)efore (S)tart
echo.
Choice /C:nsbx /N
If Errorlevel 4 goto Startmenue
If Errorlevel 3 (set /a x-=1) &goto loop
If Errorlevel 2 goto Startbat
cls
set /a x+=1 &goto loop
Grüße
rubberman