Wie navigiere ich im Bereich des übergeordneten Ordners ohne vollständigen Pfad?
678
user902300
Gibt es eine Möglichkeit, zu einem Programm zu navigieren, das sich in einem anderen Ordner des übergeordneten Verzeichnisses befindet, ohne den vollständigen Pfad zu verwenden?
Ich habe hier eine Partie:
FOLDER 1\BATCHES\batch1.bat
welches ein Programm verwendet, das sich in befindet:
Wie Sie sehen können %SYSTEMDRIVE%\Temp\, ist es an einem Ort mit so gesperrt, um mein Skript "portabel" zu machen. Gibt es etwas, was ich ersetzen könnte %SYSTEMDRIVE%\Temp\?
Oder mit anderen Worten: Ich möchte alle Vorkommen %SYSTEMDRIVE%\Temp\von meinem Stapel löschen und durch etwas ersetzen, sodass ich, wenn ich meinen FOLDER 1 an einen beliebigen Ort in meinem PC verschiebe, ausgeführt wird
".. \ BATCHES \ batch1.bat"
Joel Coehoorn vor 5 Jahren
0
2 Antworten auf die Frage
0
LotPings
Der Ordner, in dem sich die Charge befindet, kann mit %~dp0(mit einem nachgestellten Backslash) abgerufen werden.
Das Dateisystem kümmert sich um relative Ordner, die ..eine Ebene nach oben betreffen .
:: A:\FOLDER 1\BATCHES\batch1.bat @Echo off Echo batch1 folder is: %~dp0 Echo ====================== for %%A in ("%~dp0..\PROGRAMS\pro.exe") Do set "_Prg=%%~fA" for %%A in ("%~dp0..\SCRIPT\script.srpt") Do set "_Inp=%%~fA" for %%A in ("%~dp0..\FILES\myfile.x") Do set "_Out=%%~fA" Set _ Echo "%_Prg%" --input "%_Inp%" --output "%_Out%"
Wenn ich fragen darf, ist ein "% ~ dp0" -Teil mit ganzem "für %% A in" (".... ... Set_" -Teil erforderlich und warum? Ich habe es mit folgendem Befehl versucht: "" \ pro.exe "--input" .. \\ SCRIPT \ script.srpt "--output" .. \\ FILES \ myfile.x "" und der Batch führt alles wie gewünscht aus
user902300 vor 5 Jahren
0
Das "for" wird nur verwendet, um den Ausdruck in den doppelten Anführungszeichen aufzulösen. Es funktioniert auch direkt, ist jedoch weniger eindeutig: "A: \ FOLDER 1 \ BATCHES \ .. \ PROGRAMS \ pro.exe" in meinem Beispiel.
LotPings vor 5 Jahren
0
Was ich damit meinte war: Ja, ich verstehe Ihre Antwort / Ihren Code. Es ist nur so, dass beide Antworten die Verwendung von "% ~ dp0" auf die eine oder andere Art und Weise erwähnen, also ging es in meiner Frage eher um: Es ist eine Möglichkeit der Wahl "% ~ dp0" oder verliere ich irgendeinen Vorteil, wenn ich darauf verzichte und nur mit "". \\ PROGRAMS \ pro.exe "--input" .. \\ SCRIPT \ script.srpt "--output ".. \\ FILES \ myfile.x" `und sonst nichts
user902300 vor 5 Jahren
0
Abhängig vom Kontext `" .. \ PROGRAMS \ pro.exe "--input" .. \ SCRIPT \ script.srpt "--output" .. \ FILES \ myfile.x "` verweist auf das aktuelle Verzeichnis `% CD % `ist nicht notwendigerweise mit dem Stapelpfad identisch.
LotPings vor 5 Jahren
0
Ich entschuldige mich, wenn ich nervig bin, aber könnten Sie uns bitte erklären: "** ... könnte sich auf das aktuelle Verzeichnis% CD% beziehen, das nicht notwendigerweise mit dem Stapelpfad identisch ist. **" Ich lese alles und kann das nicht verstehen Punkt
user902300 vor 5 Jahren
0
Wenn Sie ein Cmd-Fenster öffnen, wird eine Eingabeaufforderung wie "C: \ Users \ UserName>" angezeigt. In diesem Ordner finden alle Aktionen statt, für die kein anderer Pfad angegeben ist. Wenn Sie einen Stapel mit einem Pfad wie "C: \ Temp \ FOLDER 1 \ BATCHES \ batch1.bat" aufrufen, bleibt das aktuelle Verzeichnis gleich "C: \ Users \ UserName", sodass ein relativer Pfad nicht relativ zum aktuellen Ordner ist in den Ordner, in dem sich der Stapel befindet.
LotPings vor 5 Jahren
1
0
JosefZ
Betrachten wir folgendes Szenario:
d:\bat> tree /F "d:\temp\FOLDER 1" Folder PATH listing for volume VolName Volume serial number is ABCD-EFGH D:\TEMP\FOLDER 1 ├───BATCHES │ batch1.bat │ └───PROGRAMS pro.exe
Hinweis, die %~dp0..\PROGRAMSunterscheidet sich von der ..\PROGRAMSRegel:
%~dp0..\PROGRAMS ist ein Pfad relativ zu dem Verzeichnis, in dem sich der Stapel befindet
( d:\temp\FOLDER 1\BATCHES\im obigen Beispiel)
..\PROGRAMS ist ein Pfad relativ zum aktuellen Verzeichnis, von dem aus der Stapel gestartet wurde
( d:\bat\im obigen Beispiel)
Wenn ich fragen darf, ist ein Teil "% ~ dp0" mit ganzem "SETLOCAL EnableExtensions ... dir / B / S"% PathToBatch% "... dir / B / S"% PathToBatch% .. \ Programs "` Teil benötigt und warum? Ich habe es mit folgendem versucht: `" .. \\ PROGRAMS \ pro.exe "--input" .. \\ SCRIPT \ script.srpt "--output" .. \\ FILES \ myfile.x "" und die Stapelverarbeitung wird ausgeführt alles wie es soll
user902300 vor 5 Jahren
0
Meine Schuld, Entschuldigung. Stellen Sie sich vor "setze" PathToBatch =% ~ dp0 "` (welches _ während des Debugging im Skript vorhanden war). Antwort aktualisiert
JosefZ vor 5 Jahren
0
Ich meinte: Was ist der Unterschied zwischen ""% ~ dp0 .. \\ FILES \ myfile.x "` und `" .. \\ FILES \ myfile.x "`? Und warum brauche ich "dir / B / S"?
user902300 vor 5 Jahren
0
Der Unterschied wird nun in der aktualisierten Antwort erläutert. Ich habe `dir / B / S"% ~ dp0 .. \ programme "verwendet, nur um _ das Ergebnis anzuzeigen _ von` .. 'in einer Pfadangabe. SuperUser ist kein kostenloser Scripting-Service, daher können Sie nicht immer eine narrensichere Lösung erwarten.
JosefZ vor 5 Jahren
0