WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Pfad als Variable in batch (http://www.wcm.at/forum/showthread.php?t=171161)

revell 03.08.2005 19:58

Pfad als Variable in batch
 
Hallo Alle,

Ich habe einen kleinen Batch geschrieben, den ich jetzt auf einem anderen System einsetzen möchte. Natürlich sind dort alle Pfade anders, also hab ich mir überlegt den Batch ein bißchen umzuschreiben um seine Portabilität zu erhöhen.
Ich hab zunächst daran gedacht zu Beginn des Batches alle Pfade als Variablen zu definieren. (Ein Hauptverzeichnis und mehrere Unterverzeichnisse darin) bzw. müßte ich nur das Hauptverzeichnis als Variable einsetzen, da die Unterverzeichnisse ja immer gleich bleiben.
Somit müßte ich auf jedem anderen System nur noch das Hauptverzeichnis editieren und dann läuft der Batch auch dort. (Sehr cool wäre wenn ich die Pfade aus einer Textdatei extrahieren könnte. Dann wäre das Ändern überhaupt noch leichter!)
Einziges Problem ist: ich hab keine Ahnung wie das geht... :rolleyes:

Vielen Dank für Eure Hilfe & lg,
revell

Flink 03.08.2005 23:33

Übergib es einfach als Argument in der Kommandozeile:

Code:

kommando.script /var/www
Im Skript verwendest du
Code:

echo %1/html/dummy.txt
%1 ist ein Platzhalter für den ersten Parameter.

revell 04.08.2005 10:16

???

Flink 04.08.2005 11:31

Zitat:

Original geschrieben von Flink

%1 ist ein Platzhalter für den ersten Parameter.

:eek:
Das ist unter LINUX allerdings $1.


Und für Windows müssen die Pfade natürlich anders lauten: C:\\ordner1\ordner2

revell 04.08.2005 12:41

Also tut mir echt leid, aber ich versteh immer noch nicht wirklich, was ich nun machen muss um in einem batch unter WinXP (!) einem Pfad eine Variable zuzuweisen und diese dann wieder bei Badarf aufzurufen. :(

Preacher 04.08.2005 13:07

Du kannst eiem Batch auch Parameter übergeben.
z.B. meinbatch.bat "c:\mein Verzeichnis\Daten"

Im batch kannst Du dann z.B. in dieses Verzeichnis wechseln, wenn Du "cd %1%" eingbist, %1% steht als Platzhalter für die erste Variable nach dem Befehl.

Weitere Parameter definieren geht mit z.B.:
set bilder=%1%\Bilder
Die Variable "Bilder" enthält dann den Wert "c:\mein Verzeichnis\Daten\Bilder".
Verwenden kann man die Variable wieder mit z.B.:
cd %Bilder%

Ich würde der Batch-Datei aber die Werweiterung ".cmd" geben, d.h. diese wird mit dem NT Kommandoprozessor CMD.exe ausgeführt, welcher einige Funktionen mehr bietet als der Prozessor comand.com.

revell 04.08.2005 14:47

Ich verstehe noch nicht ganz wie du zunächst auf %1% kommst; also dieses definierst? Der Rest ist klar. Danke!

Preacher 04.08.2005 15:41

Der Parameter, der hinter dem Aufruf der Batch steht, wird zur Laufzeit in die Variable %1% übernommen.

Geht auch so weiter:
Wenn z.B.
Meinbatch.cmd Parameter1 Parameter2 Parameter3 Parameter4
aufgerufen wird, dann hat zur Laufzeit des Batch
%1%=Parameter1
%2%=Parameter2
%3%=Parameter3
%4%=Parameter4

Wenn ein Parameter Leerzeichen (wie z.B. ein Verzeichnis) enthält, dann muss dieser in Anführungszeichen gesetzt werden.

Mach Dir mal ein Batch, wo Du folgendes reinschreibst:

@echo off
echo %1%
echo.
echo.
echo %2%

Ruf dann den bacht so auf:
test.cmd "Zeile mit Parameter 1" "Zeile mit Parameter 2"

Und dann siehst Du das Ergebnis

revell 04.08.2005 17:17

Danke schön!

revell 04.08.2005 22:07

Also, soweit scheint alles zu funktionieren. Auch wenn ich mit dem testen noch nicht ganz fertig bin.
ABER: gibts eine Möglichkeit den Wert einer Variablen aus einer anderen Datei auszulesen und wenn ja welchen?
Dann könnte ich in einer Textdatei alle Variablen definieren und einfach ändern, ohne den eigentlichen Batch modifizieren zu müssen.

flinx 06.08.2005 15:27

Versuchs mit
Code:

for /f "tokens=1,* delims==" %%i in ('find "Variable1" .\variable.txt') do (
echo %%i
set z=%%j
echo %z%
)

Inhalt variable.txt:
Variable1=hallo
Variable2=etwas
Variable3=nix

revell 07.08.2005 14:27

Der batch führt bei mir zu folgendem Resultat:
Code:

---------- .\VARIABLE.TXT
ECHO ist ausgeschaltet (OFF).
Variable1
ECHO ist ausgeschaltet (OFF).

Mit FOR Geschichten kenn ich mich noch nicht so gut aus. Hab zwar schon einiges mit google gefunden, aber so richtig geholfen hat mir da auch noch nichts. Nur noch mehr Fragen hab ich jetzt...

Da ich nicht weiß,wie ich Variablen für mein ganzes Projekt in einer eigenen Datei zentral definieren kann hab ich mir mit einem kleinen Workaround-Schummler geholfen. Ich hab alle Variablen in einem Batch definiert und von dort dann einen zweiten Batch (den eigentlichen) mit Parametern aufgerufen. So hab ich das Problem zum Teil bewältigt. (Ich weiß, dass das nicht wirklich sinnvoll ist, aber anders kann ich es leider nicht :()
Das Problem ist nur (neben völliger Ineffizienz), dass ich dann auf 9 Variablen limitiert bin und das würde ich gerne vermeiden. Ich weiß zwar, dass ich mir mit dem SHIFT Befehl helfen könnte, aber dann wird das Ganze endgültig zu kompliziert...

Also, zurück zum eigentlichen Problem und desesn Lösung:
Wie kann ich Variablen aus einer zentralen Datei in einen Batch übernehmen.
(Ich hab's auch mit Umleiten probiert, das hat aber auch nicht wirklich funktioniert...)

flinx 07.08.2005 15:48

Upps str vergessen :) :
Code:

D:\dos>type variable.txt
Variable1=hallo
Variable2=etwas
Variable3=nix
D:\dos>type variable.bat
@echo off
for /f "tokens=1,* delims==" %%i in ('findstr "Variable1" .\variable.txt') do (
echo %%i
set z=%%j
echo %z%
)
D:\dos>variable
Variable1
hallo

Zu for: schau dir mal in der Windows Hilfe die Zusatzmöglichkeiten zum for Befehl an. :)

revell 07.08.2005 19:23

Das hat leider auch icht funktioniert. Ich hab aber weiter gelesen, gesucht und ausprobiert und bin zu folgendem Ergebnis gekommen:
Code:

@echo off
FOR /f %%f IN (variable.txt) DO set %%f
echo %Variable1%
echo %Variable2%
echo %Variable3%

Dieser Code gibt mir dann die drei in "variable.txt" festgehaltenen Variablen auf dem Bildschirm aus.
Hab's zwar noch nicht in meinem eigentlichen Batch getestet, aber eigentlich müßte es so fuktionieren (hoff ich)... :)

Zwei Fragen hätt ich aber noch:
1. Wozu dient der Parameter "/f"?
2. Was sollte ich bezüglich dem Löschen von Variablen wissen?

revell 09.08.2005 14:15

Noch eine Frage, die bei meinen Recherchen und meinem immer schöneren Projekt ;) aufgetaucht ist:
Gibt's eine Möglichkeit den aktuellen Pfad auszulesen?

helios 10.08.2005 14:21

Code:

for /F "tokens=*" %%d in ('cd') do set MEIN_PFAD=%%d
echo %MEIN_PFAD%


revell 11.08.2005 09:27

Natürlich, ;) Danke!


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag