Hallo, ich habe noch keine Erfahrung mit Batchdateien. Entschuldigen Sie, wenn die Frage dumm erscheint, aber ich brauche wirklich Hilfe.
Ich muss also beispielsweise mit meinem Batch-Skript prüfen, ob es sich in einem bestimmten Ordner befindet %userprofile%\Desktop
. Ich möchte nicht, dass es sich um seinen eigenen Dateinamen kümmert. Ich habe absolut keine Ahnung, wo ich anfangen soll. Ich weiß, wie ich den aktuellen Pfad/Dateinamen usw. bekomme, aber das ist auch schon alles, was ich weiß. Wie bringe ich das Programm dazu, seinen aktuellen Pfad mit dem Pfad zu vergleichen, in dem es sich befinden soll? Oder gibt es eine andere, effizientere Methode?
Was ich erreichen möchte, ist Folgendes:
if this file is in Desktop folder(
echo It's here
)else(
echo It's not here
)
Jede Hilfe ist willkommen, vielen Dank an alle
Antwort1
Sie brauchen sich nicht zu entschuldigen, denn die von Ihnen gestellte Frage ist schwieriger, als Sie wahrscheinlich erwarten.
Lösung
So können Sie testen, ob sich Ihre Batchdatei in einem bestimmten Ordner befindet, in Ihrem Fall im Desktop-Ordner:
@echo off
:: Normalize this batch script's path
set BATCH_PATH=%~dp0
set BATCH_PATH=%BATCH_PATH:~0,-1%
:: Test for equality
if "%BATCH_PATH%"=="%USERPROFILE%\Desktop" (
echo This file is on Desktop.
) else (
echo This file is not on Desktop.
)
Dinge zu beachten
Eine alternative Möglichkeit zum Normalisieren des Pfads (und meine Lieblingsmöglichkeit) ist:
pushd "%~dp0" set BATCH_PATH=%CD% popd
- in jedem Fall möchten Sie wahrscheinlich alle nachfolgenden entfernen
\
, was eine der Aufgaben der Normalisierung ist
- in jedem Fall möchten Sie wahrscheinlich alle nachfolgenden entfernen
Verwenden Sie
%~dp0
Variable anstelle von%cd%
, da die letztere Semantikder Ordner, in dem Ihre Skripte ausgeführt werdenwährend der ersteder Ordner, in dem sich Ihr Skript befindet(was Sie gefragt haben)%0
gibt Ihnen den Speicherort Ihres Batch-Skripts an- durch Hinzufügen
dp
(dh%dp0
) Sie fragen nachScheibeUndWegwobei der Dateiname und die Erweiterung weggelassen werden (was so etwas ist wieexample.bat
und es wäre eine Belastung im nächsten Schritt - Gleichheitsprüfung) - durch Hinzufügen
~
bitten Sie,"
bei Bedarf alle öffnenden oder schließenden Elemente zu entfernen (d. h. der Pfad enthielt Leerzeichen).
Pfade werden umschlossen,
"
um Fehler aufgrund möglicher Leerzeichen in der Pfadzeichenfolge zu vermeiden
Nicht so einfach, wie man denken würde, oder?
Antwort2
Minimales funktionierendes Beispiel mit %cd%
:
IF %cd%==%userprofile%\Desktop (
ECHO It's here
) ELSE (
ECHO It's not here
)
Zwischenvariable verwenden:
FOR /F "tokens=*" %%a in ('cd') do SET CURRENT_DIR=%%a
IF %CURRENT_DIR%==%userprofile%\Desktop (
ECHO It's here
) ELSE (
ECHO It's not here
)
Da Sie sagten, Sie wüssten nicht, wo Sie anfangen sollen, hier ein paar gute Lektüren: https://en.wikibooks.org/wiki/Windows_Batch_Scripting