Batch -> 2 folder höher gehen in einem Befehl

o0Julia0o

Commander
Registriert
Dez. 2012
Beiträge
2.738
hi, ich habe eine batch wo ich eine Quelle als variable nutze. Jetzt möchte ich in diese Quelle als Pfadangabe: Aktueller Pfad -> aber 2 Pfade höher gehen. Und dann wieder tiefer. Es soll aber relativ sein. Geht das?

PfadDerBatch.bat
cd..
cd..
PfadDes\Zielordners
 
Linux oder Windows? /edit: Bin blöd, .bat ist ja Windows.

In Linux geht es mit
cd ../..

Probier das auch mal in Windows aus. Sonst mal Google bemühen.
/edit2: Google sagt, in Windows sollte "cd ..\.." funktionieren.

Du kannst auch "..\..\PfadDes\Zielordners" benutzen. Geht erst 2 hoch und dann in PfadDes und Zielordners runter. Bzw "%~dp0..\..\PfadDes\Zielordners"
 
  • Gefällt mir
Reaktionen: o0Julia0o, DerTiger, Raijin und eine weitere Person
Die Frage ist eher, warum nicht ausprobieren? Das wäre schneller gewesen als ein Thread zu eröffnen
 
  • Gefällt mir
Reaktionen: kuddlmuddl, M-X, BAGZZlash und 2 andere
Ich hatte alle Möglichen Varianten ausprobiert - aber nichts funktioniert.

Fortatus schrieb:
"%~dp0..\..\PfadDes\Zielordners"
Wenn ich "%~dp0.." mache und dann ein dir - dann wird mit der Ordner angezeigt, indem sich die Batch befindet. Nicht der Ordner darüber.

Code:
"%~dp0.."
dir

Bei
Code:
set Variable="%~dp0..\"
@echo %Variable%
wird folgendes ausgegeben:
"D:\Ordner\..\

Es wird also das ".." als Ordnername angehängt. Nicht etwa einen Ordnerbaum höher gegangen.
 
Zuletzt bearbeitet:
„..“ ist wenn man so will ein Link auf den übergeordnete Ordner welcher in jedem Ordner enthalten ist. Wenn du einem Befehl einem Pfad mit „\..“ am Ende übergibst dann wird es wie der übergeordnete Pfad behandelt.

Folgender Befehl wechselt in den übergeordneten Ordner „D:\“
Code:
cd D:\Ordner\..
 
  • Gefällt mir
Reaktionen: o0Julia0o
Die Sache mit diesen relativen Pfaden in einer Batch Datei ist aber auch etwas mit vorsicht zu genießen.

machst du zB folgenden Code in eine Batch Datei:
Code:
cd ..
dir

macht es sehr wohl einen Unterschied von wo aus du diese Batch aufrufst. Macht du via Windows Explorer & Doppelklick auf die Batch, dann befindest du dich im aktuellen Verzeichnis wo die Batch Datei liegt.
Führst du die Batch Datei aus der CMD aus und befindest dich da grade in einem anderen Verzeichnis, kannst du die Batch zwar aufrufen, aber die Ausgabe geht dann eben vom aktuellen Verzeichnis aus, wo du drin bist, und wird dir eine andere Ausgabe geben.
 
  • Gefällt mir
Reaktionen: o0Julia0o
Ich benötige es jedoch in einem Befehl.

xcopy "%~dp0..\..\PfadDes\Quellordners" "%PfaddesZielordners"

Die Quelle ist dann z.B. relativ zur Batch einen Orderbaum höher. Dann nützt mir ein cs..\.. ja nichts.
 
Code:
xcopy C:\Ordner1\Ordner2\..\..\Ordner1\ D:\Temp\
Funktioniert bei mir. (Inhalt von Ordner1 ist in Temp)
Vielleicht ein Problem der Variableninterpretation. Was passiert, wenn du %~dp0 explizit in eine Variable setzt und diese dann im Pfad?
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: o0Julia0o
Du hast aber einen absoluten Pfad angegeben: C:\

Ich möchte ja folgendes (relativ zur Batch):
xcopy \Ordner1\Ordner2\..\..\Ordner1\ Temp\
 
%~dp0 gibt doch den absoluten Pfad (samt DriveLetter) zurück, siehe:
o0Julia0o schrieb:
wird folgendes ausgegeben:
"D:\Ordner\..\

edit:
Code:
"%~dp0.."
dir
kann nicht funktionieren, also hier wird der batch Pfad ausgegeben, wenn du
Code:
cd "%~dp0.."
machst müsste das dir dann passen (wenn die Variableninterpretation funktioniert)

Edit:
wenn es am Ende eh immer der selbe Pfad ist, kannst du auch generell mit absoluten Pfaden arbeiten.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: o0Julia0o
Wenn ich folgendes im Pfad: D:\Test\Ordnertiefe2 mache:

Code:
set Quelle="%~dp0.."
echo %Quelle%
Dann wird folgendes ausgegeben:
"D:\Test\Ordnertiefe2\.."

Liegt das jetzt an der Variableninterpretation die fehlt? Ausgeben möchte ich ja folgendes:
"D:\Test"
 
ECHO zeigt es so an, weil das korrekt ist. Es überrascht mich eher, dass ein Konstrukt wie %~dp0..\.. mit DIR, XCOPY usw. funktioniert. Wieder etwas neues gelernt.
Wenn du testen möchtest ob die Variable wie gewünscht funktioniert, dann muss du es mit DIR oder so testen.

Aber ich verstehe nun nicht, was das Problem ist. Ich habe es gerade getestet: Verschiedene Verzeichnisse bis zu 3. Unterebene erzeugt ("E:\Test1\Test2\Test3" und "E:\Test1\Test4). In "Test3" liegt die Batch und 3 Text-Dateien. Mit der Batch werden die Text-Dateien erfolgreich zu "E:\Test1\Test4" kopiert.

Code:
@ECHO OFF
SET Ziel=%~dp0..\..\Test4
ECHO Vor dem Kopieren:
ECHO.
TREE /F E:\Test1
ECHO.
ECHO --------------------------------------------------------------
ECHO.
ECHO Kopiere Dateien.
ECHO.
XCOPY *.txt "%Ziel%\"
ECHO.
ECHO --------------------------------------------------------------
ECHO.
ECHO Nach dem Kopieren:
ECHO.
TREE /F E:\Test1
ECHO.
PAUSE

Wo scheitert es nun bei dir? Oder hast du wieder die Hälfte verheimlicht, weil das Problem ganz woanders liegt bzw. umfangreicher ist?
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: maloz, o0Julia0o und joshim
Es soll mit relativen Pfaden funktionieren. Nicht mit absoluten, da ist das Problem.

Also gesprochen:
copy OrdnerbaumhöheralswodieBatchist\Unterordner\. %Ziel%
 
Wenn ich das Problem richtig verstanden habe:
copy ..\Unterordner\DeineDateiDieDuKopierenWillst %Ziel%
 
  • Gefällt mir
Reaktionen: o0Julia0o
@o0Julia0o
Hab ich doch in meiner Beispiel-Batch gemacht. "%~dp0" = Ort der Batch und von dort aus 2 Verzeichnisebenen höher und dann wieder eine Ebene tiefer. Ohne "%~dp0" funktioniert es ebenfalls.

Ich bin hier raus, das wird mir zu doof.
 
  • Gefällt mir
Reaktionen: maloz
o0Julia0o schrieb:
[...]
Dann wird folgendes ausgegeben:
"D:\Test\Ordnertiefe2\.."

Liegt das jetzt an der Variableninterpretation die fehlt? Ausgeben möchte ich ja folgendes:
"D:\Test"
Es fehlt hier einfach an Grundlagenkenntnissen. Sollte man mal lesen und lernen, wenn man selbst Skripte nutzen/schreiben möchte.

Die Pfade "D:\Test\Ordnertiefe2\.." und "D:\Test" sind identisch, "D:\Test\" und "D:\Test\Ordnertiefe2\..\" ebenso.
Die Strings sind logscherweise nicht identisch, die Pfade schon.
Wenn man unbedingt den String "D:\Test" haben möchte, dann kann man einfach in das Verzeichnis wechseln und mit set pfad=%cd% (%cd% ist das batch equivalent von pwd) den kurzen String holen.

Das soll wirklich nicht böse klingen, aber wer tatsächlich 2 Jahre lang an sowas scheitert, der sollte überlegen, ob Scripting nicht eher was für andere ist.
 
  • Gefällt mir
Reaktionen: joshim, maloz und wuselsurfer
Zurück
Oben