Как проверить, находится ли текущий пакетный файл в определенной папке?

Как проверить, находится ли текущий пакетный файл в определенной папке?

Привет, я новичок в пакетных файлах, так что извините, если этот вопрос покажется глупым, но мне действительно нужна помощь.

Итак, мне нужно, чтобы мой пакетный скрипт проверял, находится ли он в указанной папке, например %userprofile%\Desktop. Я не хочу, чтобы он заботился о своем собственном имени файла. Я совершенно не представляю, с чего начать. Я знаю, как получить текущий путь/имя файла и т. д., но это все, что я знаю. Как заставить программу сравнивать свой текущий путь с путем, в котором я хочу проверить, находится ли он? Или есть другой, более эффективный метод?

Я хочу добиться следующего:

if this file is in Desktop folder(
    echo It's here
)else(
    echo It's not here
)

Любая помощь приветствуется, спасибо всем

решение1

Нет нужды извиняться, поскольку поднятый вами вопрос более сложен, чем вы, вероятно, ожидаете.

Решение

Вот как можно проверить, что ваш пакетный файл находится в определенной папке, в вашем случае в папке «Рабочий стол»:

@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.
)

Что следует отметить

  • Альтернативный способ нормализации пути (и мой любимый):

    pushd "%~dp0"
    set BATCH_PATH=%CD%
    popd
    
    • в любом случае, вы, вероятно, захотите удалить все конечные символы \, что является одной из вещей, которые делает для вас нормализация
  • используйте %~dp0переменную вместо %cd%, потому что последняя семантикапапка, в которой работают ваши скриптыв то время как первый - этопапка, в которой находится ваш скрипт(это то, о чем вы просили)

    • %0дает вам местоположение вашего пакетного скрипта
    • добавляя dp(т.е. %dp0) вы проситедискипутькоторый опускает имя файла и расширение (что-то вроде того example.bat, и это будет бременем на следующем шаге - проверке равенства)
    • добавляя ~вы просите удалить любое открытие или закрытие, "если это необходимо (т.е. путь содержал пробел)
  • пути заключены в обертку "для предотвращения ошибок из-за возможных пробелов в строке пути


Не все так просто, как можно было бы подумать, не правда ли?

решение2

Минимальный рабочий пример использования %cd%:

IF %cd%==%userprofile%\Desktop (
    ECHO It's here
) ELSE (
    ECHO It's not here
)

Использование промежуточной переменной:

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
)

Поскольку вы сказали, что не знаете, с чего начать, вот хороший материал для чтения: https://en.wikibooks.org/wiki/Пакетные_сценарии_Windows

Связанный контент